Как я могу получить конкретное слово из строки в PHP? - PullRequest
1 голос
/ 02 ноября 2008

Скажем, у вас есть строка, но вы не знаете, что в ней содержится. И вы хотите заменить все вхождения конкретного слова или части слова на форматированную версию того же слова. Например, у меня есть строка, содержащая «lorem ipsum», и я хочу заменить все слово, содержащее «lo», на «lorem can», чтобы конечный результат был «lorem can ipsum» но если бы я поместил строку «loreal ipsum» через ту же функцию, результатом был бы «loreal can ipsum». Спасибо

Ответы [ 2 ]

4 голосов
/ 02 ноября 2008
$str = preg_replace('/(\blo[a-z]+\b)/', '$1 can', $str);

Проблема с ответом Роборга:

  1. \w соответствует цифрам и подчеркиванию, которые не являются действительно символами слова на человеческом языке, поэтому он будет соответствовать 'lo_fi' или '__lo __'.
  2. это также будет соответствовать словам, которые не начинаются с lo, например, «slorem», или даже словам, которые заканчиваются на lo, таким как «allo».

\b гарантирует, что lo следует за переносом слов (нулевая ширина), а [a-z]+ гарантирует, что по крайней мере один алфавитный символ следует за 'lo'.

Редактировать: Я вижу, что текст вопроса говорит «содержит», а не «начинается с», и в этом случае первый \b может быть опущен.

Редактировать 2: Обратите внимание, что ни одно из этих решений не является международно-безопасным. Я не проверял это, но PHP RegEx довольно неплох, поэтому я предполагаю, что он будет работать:

$str = preg_replace('/(\blo[a-z\p{L}]+\b)/', '$1 can', $str);
0 голосов
/ 02 ноября 2008

$str = preg_replace('/lo(\w*)/', 'lo$1 can', $str);

Это заменяет "lo" плюс любые символы слова на "lo" + другие символы + "can"

Он также заменит «lo» на «lo can» - если вы не хотите этого, измените \w* на \w+

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...