Intereting Posts
Как вставить несколько строк из текстового поля в MySQL Не могу понять, почему скрипт php не работает при вызове $ .ajax Как разрешить выделение жирным шрифтом, подчеркивание и курсив в текстовой области Может ли ссылочная переменная в PHP использоваться как псевдоним для длинных имен переменных? Преобразование строки в формат timestamp MySQL в php Вызов API телеграмм для создания бота-загрузчика Лак: как отдельно кешировать страницы на основе значения определенного файла cookie Захват экрана с помощью PHP и / или Javascript? Уведомление в корзине Woocommerce, показывающее несколько раз Проверка эха, по которой установлен флажок Как правильно исправить ошибку времени выполнения phpMailer max? Как бы вы структурировали схему базы данных форума? Вывод журнала ошибок Java Ubuntu PHPUnit: ожидание вызова метода с массивом в качестве аргумента Не удалось подключиться к базе данных mysql?

Как найти полные слова только в строке

Как найти полные слова только в строке

<?php $str ="By ILI LIKUALAYANA MOKHTAKUALAR AND G. SURACH Datuk Dr Hasan Ali says he has no intention of joining Umno. Pic by Afendi Mohamed KUALA LUMPUR: FORMER Selangor Pas commissioner Datuk Dr Hasan Ali has not ruled out the possibility of returning to Pas' fold"; $search ="KUALA"; ?> 

Solutions Collecting From Web of "Как найти полные слова только в строке"

Чтобы узнать, находится ли конкретное слово в строке, вы можете использовать регулярное выражение с границами слов, например:

 $str = "By ILI LIKUALAYANA MOKHTAKUALAR AND G. SURACH Datuk Dr Hasan Ali says he has no intention of joining Umno. Pic by Afendi Mohamed KUALA LUMPUR: FORMER Selangor Pas commissioner Datuk Dr Hasan Ali has not ruled out the possibility of returning to Pas' fold"; $search = "KUALA"; if (preg_match("/\b$search\b/", $str)) { // word found } 

Здесь \b означает «граница слова». Он фактически не соответствует никаким символам, только границам, поэтому он соответствует краю между словами и пробелами, а также соответствует краям в концах строк.

Если вам нужно сделать его нечувствительным к регистру, вы можете добавить i в конец строки соответствия следующим образом: "/\b$search\b/i" .

Если вам нужно знать, где в строке был результат, вы можете добавить третий параметр $matches matches, который дает сведения о совпадении, например:

 if (preg_match("/\b$search\b/", $str, $matches)) { // word found $position = $matches[1]; } 

Просто разделите строку:

 $words = explode(' ',$str); if (in_array($search,$words)){ echo "FOUND!"; } 

Или, если вам нужно место:

 $words = explode(' ',$str); $exists_at = array_search($seach,$words); if ($exists_at){ echo "Found at ".$exists_at." key in the \$word array"; } 

редактирует:

В свете борьбы с регулярным выражением re-regex, идущей здесь, я должен отменить этот ответ и отложить до толпы регулярных выражений, но я собираюсь оставить его для записи истории. Я всегда полагал, что работа с массивами была более эффективной с точки зрения обработки, но я решил провести несколько тестов, и оказалось, что мое предположение было неправильным. Результат теста на одно слово:

 Time to search for word 10000 times using in_array(): 0.011814 Time to search for word 10000 times using preg_match(): 0.001697 

Код, который я использовал для тестирования (который предполагает, что взорваться будет использоваться каждый раз):

 $str ="By ILI LIKUALAYANA MOKHTAKUALAR AND G. SURACH Datuk Dr Hasan Ali says he has no intention of joining Umno. Pic by Afendi Mohamed KUALA LUMPUR: FORMER Selangor Pas commissioner Datuk Dr Hasan Ali has not ruled out the possibility of returning to Pas' fold"; $search ="KUALA"; $start = microtime(true); for($i=0;$i<1000;$i++){ $words = explode(' ',$str); if (in_array($search,$words)){ // } } $end = microtime(); $total = $end-$start; echo "Time to search for word 10000 times using in_array(): "; echo $total; echo "<br />"; $start = microtime(true); for($i=0;$i<1000;$i++){ if (preg_match("/\b$search\b/", $str)) { // word found } } $end = microtime(); $total = $end-$start; echo "Time to search for word 10000 times using preg_match(): "; echo $total; 

Итак, сделайте вывод: перейдите с preg_match ("/ \ b $ search \ b /", $ str)

 $str ="By ILI LIKUALAYANA MOKHTAKUALAR AND G. SURACH Datuk Dr Hasan Ali says he has no intention of joining Umno. Pic by Afendi Mohamed KUALA LUMPUR: FORMER Selangor Pas commissioner Datuk Dr Hasan Ali has not ruled out the possibility of returning to Pas' fold"; $search ="KUALA"; $pattern='/\b$search\b/'; if (preg_match($pattern, $str, $matches)) echo "FOUND AT POSITION ".$matches[1]; else echo "NOT FOUND" 

Используйте функцию PHP stripos ().

 $str = "These aren't the droids you are looking for."; $search = "droids"; $pos = stripos($str, $search); 

$ pos теперь будет равно 17, позиции, в которой начинается строка. Если вы ищете, чтобы слово имело точно такой же случай, используйте вместо него функцию strpos (); stripos () нечувствителен к регистру. Если функция не находит слово, оно вернет FALSE.

Вы можете использовать это, чтобы определить, содержит ли строка слово.

 if(stripos($str, $search)){ echo("It contains the word!"); }else{ echo("Word not found."); } 

Если вы хотите проверить, что он существует в строке сам по себе (не является частью другого слова), то вы, вероятно, должны смотреть на регулярные выражения. Что-то вроде:

 $str = "These aren't the droids you are looking for. This droid is."; $search = "droid"; if (preg_match("/\b$search\b/", $str, $match)) { $result = $match[0]; } 

Это будет соответствовать индексу этого слова, но не тогда, когда оно используется внутри другого слова. Итак, в этом примере:

 $result == 51 

Хотя поисковый запрос появился ранее в строке.

http://php.net/manual/en/function.strpos.php

Или используйте RegExpr:

 $str = "The text in the first post"; $search = "first"; if( preg_match('/\b'.$search.'\b/', $str) ) { echo 'FOUND!'; }