Я создал функцию, которая выделяет отдельные слова внутри строки. Это выглядит так:Поиск и совпадение нескольких слов с использованием RegEx
function highlight($input, $keywords) {
preg_match_all('~[\w\'"-]+~', $keywords, $match);
if(!$match) { return $input; }
$result = '~\\b(' . implode('|', $match[0]) . ')\\b~i';
return preg_replace($result, '<strong>$0</strong>', $input);
}
Мне нужна функция для работы с массивом разных слов, поддерживающих пробел в поиске.
Пример:
$search = array("this needs", "here", "can high-light the text");
$string = "This needs to be in here so that the search variable can high-light the text";
echo highlight($string, $search);
Вот то, что я до сих пор изменить функцию, чтобы работать так, как мне это нужно, чтобы:
function highlight($input, $keywords) {
foreach($keywords as $keyword) {
preg_match_all('~[\w\'"-]+~', $keyword, $match);
if(!$match) { return $input; }
$result = '~\\b(' . implode('|', $match[0]) . ')\\b~i';
$output .= preg_replace($result, '<strong>$0</strong>', $keyword);
}
return $output;
}
Obviou sly это не работает, и я не уверен, как заставить это работать (регулярное выражение не является моей сильной стороной).
Другой вопрос, который может быть проблемой, как функция будет иметь дело с множественным совпадением? Такие, как $search = array("in here", "here so");
, как результат будет что-то вроде:
This needs to be <strong>in <strong>here</strong> so</strong> that the search variable can high-light the text
Но это должно быть:
This needs to be <strong>in here so</strong> that the search variable can high-light the text
Я мог бы быть неправильно, так как регулярные выражения не являются сильной стороной для меня либо, но не должно быть $ 1 вместо $ 0? – maiorano84
Я действительно не мог ответить на это для вас @ maiorano84, но могу вам сказать, что функция в верхней части этого вопроса работает правильно, используя следующий синтаксис: 'echo highlight (« Доброе утро и мир привет »,« утренний привет »,); ' –
Тогда есть вероятность, что определенная часть верна. Будьте в надежды, вы получите ответ. – maiorano84