Здравствуйте, у меня есть этот код для выделения слов в некоторой строке:
$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);
}
Это выделено правильно. В этом случае :
Привет бла бла как являются ты сегодня? Привет вы ….
И возможно ли выделить ключевое слово только на определенном расстоянии? Например, в какой-то функции
function($keyword,$distance){
...
}
Например, я установил расстояние 2 и в моем примере будет выделено только второе предложение, потому что в первом предложении это расстояние между Hello are
больше лимита.
Правильный результат будет:
Привет бла бла, как ты сегодня? Привет вы ….
Спасибо за вашу помощь.
Вот мое предложение:
<?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;
}
Как насчет:
$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";
Выход:
Привет бла бла как являются ты сегодня? Привет ты ….
Источник:
<b>Hello</b> bla bla how <b>are</b> you today? Hello are you ....