您好我有这段代码用于突出显示某些字符串中的单词:
$keyword = 'Hello are';
$keyword = explode(' ', $keyword);
$expr = "Hello bla bla how are you today? Hello are you ....";
for ($i = 0; $i < sizeof($keyword); $i++) {
$expr = preg_replace("/\w*?$keyword[$i]\w*/i", "<b>$0</b>", $expr);
}
正确突出显示。在这种情况下:
你好 bla bla今天 你怎么样? 你好你......
并且可能只在特定距离突出显示关键字?例如在某些功能中
function($keyword,$distance){
...
}
例如我设置距离2,在我的例子中只会突出显示第二句,因为第一句是Hello are
之间的距离,大于限制。
正确的结果将是: 你好bla bla今天好吗? 你好你......
感谢您的帮助。
答案 0 :(得分:0)
怎么样:
$keyword = array('Hello', 'are');
$expr = "Hello bla bla how are you today? Hello are you ....";
$expr = preg_replace("/\b($keyword[0])((?:\s+\S+){3}\s+)($keyword[1])\b/i", "<b>$1</b>$2<b>$3</b>", $expr);
echo $expr,"\n";
<强>输出:强>
您好 bla bla今天 你是怎么回事?你好,你......
<强>来源:强>
<b>Hello</b> bla bla how <b>are</b> you today? Hello are you ....
答案 1 :(得分:0)
这是我的主张:
<?php
$keywords = array('Hello', 'are');
$expr = "Hello bla bla how are you today? Hello are you ....";
echo highlight($expr, $keywords, 0), PHP_EOL;
echo highlight($expr, $keywords, 1), PHP_EOL;
echo highlight($expr, $keywords, 3), PHP_EOL;
function highlight($expression, $keywords, $distance) {
$pattern = sprintf(
"/
\b(%s)\b
((?:\s+\w+){%s})
\s+
\b(%s)\b
/ix",
$keywords[0],
$distance,
$keywords[1]);
$replacement = "<b>$1</b>$2<b>$3</b>";
$result = preg_replace($pattern, "<b>$1</b>$2<b>$3</b>", $expression);
return $result;
}