正则表达式 - WordPress插件

时间:2012-02-14 04:32:12

标签: regex wordpress

我正在学习如何在WordPress中编写插件,我的插件应该做的是替换所有

`code`

并制作它们

<span class="code">code</span>

我的代码

function format_code($content) {
    $match = preg_match_all('/`.+\`/', $content, $matches);

    if($match)
    {  
        $theContent = preg_replace('/`.+\`/', '<span class="code">$0</span>', $content);
        $theContent = preg_replace('/`/', '', $theContent);
    }  

    else  
    {  
        $theContent = $content;  
    }   

    return $theContent; 
}

add_filter('the_content', 'format_code');

我已经能够做到这个`代码`但是删除了(`)我用了这个[我基本上删除了所有的`]

$theContent = preg_replace('/`/', '', $theContent);

还有其他方法吗?

2 个答案:

答案 0 :(得分:3)

您可以在替换中使用捕获括号和“$ 1”:

$theContent = preg_replace('/`(.+)\`/', '<span class="code">$1</span>', $content);

(这是你的意思吗?)

顺便说一句,为什么你逃脱了你的第二次反击而不是那个正则表达式的第一次?

另外,您可能需要考虑使用正则表达式:

/`([^`]+)`/

例如,要避免"This is ' code ' and this is more ' code '""This is <span class="code">code ' and this is more ' code</span>"替换,因为.+贪婪且匹配太多。 (用我给出的示例中的反引号替换单引号,我无法使用此wiki标记显示字面反引号!)

答案 1 :(得分:1)

如果您使用捕获组,请执行以下操作:

$theContent = preg_replace('/`(.+)\`/', '<span class="code">$1</span>', $content);

......那样可以省去第二步。

在正则表达式的括号中包围一个项目会导致它被“捕获” - 请注意,在上面我也将$0更改为$1所以我只是在“使用”括号中的项目,但它正在取代整个“发现”的大块。