在下面的替换脚本中,如果$ myKeyword为“test”且替换文本为“This,test可以是测试”,我希望替换后的文本为“This,< b> test”可以是< em>测试< / em>“
然而,我得到的是:这个,测试可以是< b>测试< / b>。
我正在尝试确定为什么它会跳过关键字“test”的第一个实例。
function save_rseo_content($content){
global $post;
$mykeyword = rseo_getKeyword($post);
$mykeyword = " ".preg_quote($mykeyword, '/');
/*had to add " " before keyword so that the it skips the instance
where the keyword has already been formatted. Only matches " keyword"*/
$theContent =
preg_replace_callback("/\b($mykeyword)\b/i","doReplace", $content);
return $theContent;
}
function doReplace($matches)
{
static $count = 0;
switch($count++) {
case 0: return ' <b>'.trim($matches[1]).'</b>';
case 1: return ' <em>'.trim($matches[1]).'</em>';
case 2: return ' <u>'.trim($matches[1]).'</u>';
default: return $matches[1];
}
}
答案 0 :(得分:0)
不是在关键字之前检测空格,而是对于&gt;使用负向外观可能更好。字符:
preg_replace_callback("/\b(?<!>)($mykeyword)\b/i","doReplace", $content);