【问题标题】:Higlight words in specific distance突出显示特定距离的单词
【发布时间】:2015-01-10 13:29:30
【问题描述】:

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

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

感谢您的帮助。

【问题讨论】:

  • 简单,不要破坏关键字让它保持Hello are :P
  • 这是我想要的例子,例如句子中的单词与 1 不同的距离。

标签: php regex highlight


【解决方案1】:

这是我的建议:

<?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;
}

【讨论】:

    【解决方案2】:

    怎么样:

    $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 ....
    

    【讨论】:

      猜你喜欢
      • 2019-06-24
      • 2014-03-08
      • 1970-01-01
      • 2022-06-14
      • 2021-06-28
      • 2020-10-11
      • 1970-01-01
      • 2017-08-29
      • 2013-08-25
      相关资源
      最近更新 更多