突出显示特定距离的单词

时间:2014-11-13 11:50:48

标签: php regex highlight

您好我有这段代码用于突出显示某些字符串中的单词:

$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今天好吗? 你好你......

感谢您的帮助。

2 个答案:

答案 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;
}