Preg_Match точное слово и вывод слова из строкового текста - PullRequest
1 голос
/ 24 марта 2020

Как вывести слово совпадения без учета регистра? PHP Код:

if(preg_match("/(?i)(?<= |^)" . $Word . "(?= |$)/", $String)) {
 // If Exact Word is Match Case Insensitive
}

Пример моей строки: Привет, видео было забавным.

Я хочу получить «Видео» из строки, но мой PHP preg_match регистр нечувствителен, и я ищу "video", мне нужно получить вывод "Video" из строки в.

Другой пример строки: Здравствуйте, vIDeo было забавно. Получить вывод "vIDeo" из строка.

Другой пример строки: Привет, vIDeowas смешно. Эта строка не должна выводить «vIDEOwas», потому что она не соответствует точному слову.

Мне нужен этот скрипт, чтобы я мог видеть, как точные слова находятся в строке после их поиска.

Ответы [ 2 ]

1 голос
/ 24 марта 2020

Вы можете использовать третий аргумент для preg_match(), чтобы получить совпадения; в вашем случае будет не более одного сопоставленного шаблона:

$body = 'Hello there, the Video was funny';
$search = 'video';

if (preg_match('/\b' . preg_quote($search, '/') . '\b/i', $body, $matches)) {
  print_r($matches[0]); // Video
}

Несколько других изменений в вашем коде:

  1. Всегда используйте preg_quote(), если вы не знаете, где поисковый термин происходит от.
  2. Я использую модификатор /i вместо (?i)
  3. Вместо утверждения с упреждением и прогнозом, я использую утверждение с нулевой шириной \b вместо.
0 голосов
/ 24 марта 2020

Вы можете заменить найденное совпадение на $Word, а затем сравнить две строки

$String = 'Hello there, the Video was funny';
$Word = 'Video';
$s2 = preg_replace("/(?i)(?<= |^)" . $Word . "(?= |$)/", $Word, $String);

if ( $s2 === $String ) {
    echo "found";
}else {
    echo "NOT found";
}

Другое решение

$String = 'Hello there, the Video was funny';
$Word = 'Video';
$s = explode(' ',$String);
foreach($s as $w) {
    if( $w === $Word) {
        echo $w;
        break;
    }
}
...