найдите слово и выделите его с помощью str_replace - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь найти ключевое слово (например, «звездные войны») в строке абзаца (например, «Я купил своей счастливой звезде новую кость войны, и он любит ее».) И выделю ее между тегами

моя проблема в том, что каждый раз в моих ключевых словах есть 2 слова типа star wars str_replace найти точно star wars я хочу найти отдельно star и wars, а затем выделить это ...

   $text="star mama say wars"
   $keyword="star wars"
   $newkeyword = explode(" ", $keyword);
   $text = str_replace($newkeyword, "<strong>$newkeyword</strong>", $text);
   OUTPUT=<strong>array</strong>

я хочу ...

    OUTPUT=<strong>star</strong> <strong>wars</strong>

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

Ответы [ 3 ]

2 голосов
/ 21 октября 2019

Вы должны использовать preg_replace и убедиться, что это полные слова с \b перед выполнением замены, или она заменится, когда вы напишите, скажем starring

$text="some film is starring a movie star with wars";
$keyword="star wars";
$newkeyword = explode(" ", $keyword);

foreach ($newkeyword as $key => $value) {
    $text = preg_replace("/\b" .  $value . "\b/", "<strong>$value</strong>", $text);
}

echo $text;

https://3v4l.org/finkZ

2 голосов
/ 21 октября 2019

Думаю, я бы лучше построил один шаблон для preg_replace, чем делал бы цикл.

$pattern = '~\b(?:'.preg_replace('~[^\w\'-]+~', "|", $keyword).')\b~i';

В этом шаблоне мы заменяем все символы , которые не \w символ слова , одиночную кавычку или дефис через трубу, поместите его в не захватывающую группу , окруженную границами слова \b и используйте i флаг для сопоставления без учета регистра при желании. Таким образом, шаблон ~\b(?:star|wars)\b~i. Далее добавьте флаг u, если на входе указано UTF-8.

и выполните замену:

$text = preg_replace($pattern, '<b>$0</b>', $text);

Где $0 - ссылка на полное совпадение. Преимущество использования захвата в замене состоит в том, что он не меняет исходный регистр (верхний / нижний).

Вот демонстрация PHP на 3v4l.org

0 голосов
/ 21 октября 2019

Используйте loop для поиска и замены ключевых слов:

  $text="star mama say wars"
  $keyword="star wars"
  $newkeyword = explode(" ", $keyword);

  foreach ($newkeyword as $key => $value) {
    $text = str_replace($value, "<strong>$value</strong>", $text);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...