【发布时间】:2016-12-03 11:01:09
【问题描述】:
这是我当前在 php 中的函数:
function highlight_keywords($keyword, $string) {
return preg_replace("/\p{L}*?".preg_quote($keyword)."\p{L}*/ui", "<span class=\"h\">$0</span>", $string);
}
css 类:
span.h {
font-weight: 700;
color: @color_action;
}
例子:
echo highlight_keywords('anto', 'Andres Santos');
问题是结果是:
Andres <span class="h">Santos</span>
...应该是:
Andres S<span class="h">anto</span>s
【问题讨论】:
-
为什么会有 \p{L}*?模式的一部分?为什么不只是
return preg_replace("/".preg_quote($keyword)."/ui", "<span class=\"h\">$0</span>", $string); -
@BrandonHorsley 你是对的。您的回答比下面的第一个回答还要简单。
-
无需使用正则表达式来匹配静态值。使用
return str_replace($keyword, '<span class="h">' . $keyword . '</span>', $string); -
@chris85 是正确的,str_ireplace 如果您需要不区分大小写。
-
我可能错了,但是 str_replace 在返回特殊字符时并不总是很好。
标签: php regex preg-replace highlighting