在下面的函数中,我想匹配不区分大小写的关键字(应该匹配“Blue Yoga Mats”和“蓝色瑜伽垫”)...
但是,它目前仅在关键字是相同的情况下才匹配。
$ mykeyword =“蓝色瑜伽垫”;
$post->post_content = preg_replace_callback("/\b($mykeyword)\b/","doReplace", $post->post_content);
// the callback function
function doReplace($matches)
{
static $count = 0;
// switch on $count and later increment $count.
switch($count++) {
case 0: return '<b>'.$matches[1].'</b>'; // 1st instance, wrap in bold
case 1: return '<em>'.$matches[1].'</em>'; // 2nd instance, wrap in italics
case 2: return '<u>'.$matches[1].'</u>'; // 3rd instance, wrap in underline
default: return $matches[1]; // don't change others.
}
}
答案 0 :(得分:3)
只需将i
修饰符添加到正则表达式即可使其执行不区分大小写的匹配:
"/\b($mykeyword)\b/i"
顺便说一句,如果您还没有,则需要从关键字中转义特殊的正则表达式字符。如果存在任何问题,他们可能搞砸你的正则表达式并导致PHP警告/错误。在执行替换之前调用preg_quote()
:
$mykeyword_escaped = preg_quote($mykeyword, '/');
$post->post_content = preg_replace_callback("/\b($mykeyword_escaped)\b/i","doReplace", $post->post_content);
答案 1 :(得分:0)
将“i”修饰符添加到正则表达式:
/\b($mykeyword)\b/i
答案 2 :(得分:0)
$post->post_content = preg_replace_callback("/\b($mykeyword)\b/i","doReplace", $post->post_content);
使用TOKENregexpTOKENi
执行不区分大小写的搜索。
有关修饰符的详细信息,请参阅PHP手册中的Pattern Modifiers。
答案 3 :(得分:0)
使用/ i修饰符:
$post->post_content = preg_replace_callback("/\b($mykeyword)\b/i","doReplace", $post->post_content);
答案 4 :(得分:0)
您也可以使用T-Regx library:
<?php
pattern('\b($mykeyword)\b')->replace($post->post_content)->callback('doReplace');
// ↑ Delimiters are not required
此外,使用$mykeyword
可能会导致用户输入的字符破坏您的模式。使用T-Regx,您可以使用Prepared Patterns,只需构建您的模式:
<?php
$pattern = Pattern::inject("\b(@keyword)\b", [
'keyword' => $mykeyword
// quoting unsafe characters
]);
$pattern->replace($post->post_content)->callback('doReplace');