好吧,我正在尝试在我正在制作的搜索脚本中使搜索术语变为粗体,除了我无法使其工作不区分大小写.
function highlight($term,$target){
$terms = explode(" ", $term);
foreach($terms as $term){
$result = (eregi_replace($term, "<strong>$term</strong>", $target));
}
return $result;
}
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止的功能..它在PHP.net上说eregi_replace是不区分大小写的匹配但显然由于某种原因它不起作用.(我是个菜鸟).
有任何想法吗?:d
从PHP 5.3开始不推荐使用ereg_*(POSIX正则表达式)函数,并且很长时间没有提出建议.最好使用PCRE()函数(例如).preg_*preg_replace
您可以通过创建不区分大小写的正则表达式,然后在<strong>标记中包装匹配来执行此操作:
function highlight($term, $target)
{
$terms = array_unique(explode(" ", $term)); // we only want to replace each term once
foreach ($terms as $term)
{
$target = preg_replace('/\b(' . preg_quote($term) . ')\b/i', "<strong>$1</strong>", $target);
}
return $target;
}
Run Code Online (Sandbox Code Playgroud)
这样做是先调用preg_quote你的,$term这样如果有任何字符在术语中的正则表达式中有意义,它们就会被转义,然后创建一个正则表达式来查找由单词边界包围的那个术语(\b- 所以如果这个词是"好的",它不会与"再见"相匹配).该术语包含在括号中,以使正则表达式引擎将其现有形式中的术语捕获为"反向引用"(正则表达式引擎挂起到匹配部分的方式).通过指定i选项,表达式不区分大小写.最后,它用<strong>标记包围的相同反向引用替换任何匹配.
$string = "The quick brown fox jumped over the lazy dog. The quicker brown fox didn't jump over the lazy dog.";
$terms = "quick fox";
highlight($terms, $string);
// results in: The <strong>quick</strong> brown <strong>fox</strong> jumped over the lazy dog. The quicker brown <strong>fox</strong> didn't jump over the lazy dog.
Run Code Online (Sandbox Code Playgroud)
如果你想要一个关于正则表达式的好教程,请查看regular-expressions.info上的教程.