我正在学习如何在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);
还有其他方法吗?
答案 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
所以我只是在“使用”括号中的项目,但它正在取代整个“发现”的大块。