【问题标题】:preg_replace not replacing in a Wordpress pluginpreg_replace 没有在 Wordpress 插件中替换
【发布时间】:2011-03-27 11:19:24
【问题描述】:

在我之前的question 的后续行动中,我想用以下格式的链接替换所有大写* 单词的每个实例:

dictionary.com/browse/<TERM>

我正在使用的preg_replace 电话是这样的:

$content = preg_replace('#[A-Z][A-Z]+#', '<a href="//dictionary.com/browse/$1">$1</a>', $content);

使用http://gskinner.com/RegExr,看来我的正则表达式是正确的,并且它应该在每次查找时都被替换。

我是否做错了什么,无论是在preg_replace 调用中,还是在将插件/过滤器注册到 Wordpress API 时?


调用的完整上下文:

function define_filter($content){
  $content = preg_replace('#[A-Z][A-Z]+#', '<a href="//dictionary.com/browse/$1">$1</a>', $content);
}

add_filter('the_content', 'define_filter');

* 我使用[A-Z][A-Z]+ 语法来确保我不匹配像“I”和“A”这样的词

【问题讨论】:

    标签: regex preg-replace wordpress


    【解决方案1】:

    我认为函数需要返回替换的结果:

    return $content;
    

    另外,那个正则表达式看起来不正确。如果你想匹配一个全部大写的单词,它是

    '#\b[A-Z]+\b#'
    

    另外,你想要$0(整个匹配),而不是$1(你的正则表达式没有的第一个捕获组)

    【讨论】:

    • \b 的添加有所帮助.. 现在它替换了链接,但没有在匹配中附加$1.. 有什么进一步的想法吗?
    • 我没有注意到:你想要$0(整场比赛),而不是$1(第一个捕获组,你的正则表达式没有)。
    • 这就是我想要的!谢谢,艾伦
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多