Выделите слова на определенном расстоянии

Здравствуйте, у меня есть этот код для выделения слов в некоторой строке:

$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больше лимита.

Правильный результат будет:
Привет бла бла, как ты сегодня? Привет вы ….

Спасибо за вашу помощь.

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

Выход:

Привет бла бла как являются ты сегодня? Привет ты ….

Источник:

<b>Hello</b> bla bla how <b>are</b> you today? Hello are you ....
0

По вопросам рекламы [email protected]