PHP найти слово в строке

PHP найти слово в строке

Использование strpos() для регистрозависимого поиска

Простейшим способом проверить, содержит ли строка определённое слово, является использование PHP функции strpos(). Она возвращает позицию первого вхождения подстроки в строке или FALSE, если соответствия не найдены. Поэтому можно сравнить значение, возвращаемое функцией strpos() с FALSE, чтобы проверить наличие подстроки. Пример:

$the_string = «Я на 5 лет старше тебя.»; $the_word = «лет»; $the_character = «Я»; $the_substring = «5 лет»; // Вывод — Слово «лет» есть в данной строке. if (strpos($the_string, $the_word) !== false) { echo ‘Слово «‘.$the_word.'» есть в данной строке.’; } // Вывод — Символ «Я» есть в данной строке. if (strpos($the_string, $the_character) !== false) { echo ‘ Символ «‘.$the_character.'» есть в данной строке.’; } // Вывод — Подстрока «5 лет» есть в данной строке. if (strpos($the_string, $the_substring) !== false) { echo ‘Подстрока «‘.$the_substring.'» есть в данной строке.’; }

Обратите внимание, что я использовал оператор строгого неравенства (!==). Если искомое слово встречается в начале строки, функция strpos() вернёт 0. Это будет расценено оператором != как значение FALSE. Пример:

// Вывод — Символа «Я» нет в данной строке. if (strpos($the_string, $the_character) != false) { echo ‘Символ «‘.$the_character.'» есть в данной строке.’; } else { echo ‘Символа «‘.$the_character.'» нет в данной строке.’; }

При поиске целого слова (например, “на”) функция также вернёт значение TRUE, если строка содержит такие слова, как “она”, “вена” или “например”.

Также можно использовать > -1 вместо !==. Потому что даже если strpos() вернёт 0 как значение индекса, он всё равно будет больше -1. Но помните, что оператор «больше» (>) работает медленнее оператора строгого неравенства (!==).

Использование функции stripos() для регистронезависимого поиска

Для регистрозависимого поиска можно использовать функцию stripos(). Она работает аналогично функции strpos(). Единственное отличие заключается в том, что она игнорирует регистр при поиске подстроки внутри другой строки.

$the_string = «Ваня любит и яблоки, и апельсины.»; $the_word = «ваня»; $the_character = «Я»; $the_substring = «ЛЮбИт И»; // Вывод — Слово «ваня» есть в данной строке. if (stripos($the_string, $the_word) !== false) { echo ‘Слово «‘.$the_word.'» есть в данной строке.’; } // Вывод — Символ «Я» есть в данной строке. if (stripos($the_string, $the_character) !== false) { echo ‘Символ «‘.$the_character.'» есть в данной строке.’; } // Вывод — Подстрока «ЛЮбИт И» есть в данной строке. if (stripos($the_string, $the_substring) !== false) { echo ‘Подстрока «‘.$the_substring.'» есть в данной строке.’; }

Функция strpos() вернула бы значение FALSE во всех перечисленных выше случаях. Но функция stripos() проигнорировала регистр и вернула значение TRUE.

Другим способом поиска, независящим от регистра, является преобразование всех строк и подстрок в одинаковый регистр, используя функции strtolower() и strtoupper(). Для проверки можно использовать strpos(). Но проще stripos().

Использование регулярных выражений

Также для поиска можно использовать регулярные выражения. Они лучше подходят для случаев, когда вы ищете в строке более сложные конструкции.

Но помните, что функция strpos() работает в три раза быстрее, чем регулярные выражения. Следующий пример демонстрирует, как с их помощью найти слово, символ в строке:

$the_string = «Я на 5 лет старше тебя.»; $the_word = «лет»; $the_character = «Я»; $the_substring = «5 лет»; // Вывод — Слово «лет» есть в данной строке. if (preg_match(‘/лет/’, $the_string)) { echo ‘Слово «‘.$the_word.'» есть в данной строке.’; } // Вывод — Символ «Я» есть в данной строке. if (preg_match(‘/Я/’, $the_string)) { echo ‘Символ «‘.$the_character.'» есть в данной строке.’; } // Вывод — Подстрока «5 лет» есть в данной строке. if (preg_match(‘/5 лет/’, $the_string)) { echo ‘Подстрока «‘.$the_substring.'» есть в данной строке.’; }

Использование функции preg_match() имеет смысл только при сложном поиске. Например, для проверки того, содержит ли строка слова с десятью и более символами и т.п. Пример:

$the_string = ‘Фотосинтез и рискованный – длинные слова.’; // Вывод — Данная строка содержит слова из 10 и более символов. if (preg_match(‘/w{10,}/i’, $the_string)) { echo ‘Данная строка содержит слова из 10 и более символов.’; }

Чтобы сделать поиск регистронезависимым, добавьте флаг i в конец шаблона. Пример реализации:

$the_string = «Ваня любит и яблоки, и апельсины.»; $the_word = «ваня»; $the_character = «Я»; $the_substring = «ЛЮбИт И»; // Вывод — Слово «ваня» есть в данной строке. if (preg_match(‘/ваня/i’, $the_string)) { echo ‘Слово «‘.$the_word.'» есть в данной строке.’; } // Вывод — Символ «Я» есть в данной строке. if (preg_match(‘/Я/i’, $the_string)) { echo ‘Символ «‘.$the_character.'» есть в данной строке.’; } // Вывод — Подстрока «ЛЮбИт И» есть в данной строке. if (preg_match(‘/ЛЮбИт И/i’, $the_string)) { echo ‘Подстрока «‘.$the_substring.'» есть в данной строке.’; }

Использование регулярных выражений для поиска точного вхождения слова

Функции strpos() и stripos()работают быстрее, чем регулярные выражения. Но их использование для поиска точного вхождения слова может быть проблематичным.

В подобных ситуациях лучше применять регулярные выражения. Можно использовать выражение b в шаблоне регулярного выражения, чтобы обозначить границу слова. Если слово, которое вы ищете, заключено в выражения b, функция preg_match() найдёт только точные вхождения слова и вернет FALSE для частичных совпадений. Вот пример:

$the_string = ‘Фотосинтез и рискованный – длинные слова.’; $the_word = ‘синтез’; // Вывод — Слово «синтез» имеет точное совпадение в данной строке. if (preg_match(‘/синтез/’, $the_string)) { echo ‘Слово «синтез» имеет точное совпадение в данной строке. ‘; } // Вывод — Слово «синтез» имеет точное совпадение в данной строке. if (strpos($the_string, $the_word)) { echo ‘Слово «синтез» имеет точное совпадение в данной строке. ‘; } // Вывод — Слово «синтез» не имеет точных совпадений в данной строке. if (preg_match(‘/bсинтезb/’, $the_string)) { echo ‘Слово «синтез» имеет точное совпадение в данной строке. ‘; } else { echo ‘Слово «синтез» не имеет точных совпадений в данной строке. ‘; }

Использование strstr() для поиска подстроки

PHP функция strstr() может быть использована для проверки вхождения символа или подстроки. Она возвращает часть исходной строки, начиная с первого вхождения искомого слова и до конца. Функция вернёт значение FALSE, если подстрока не найдена. Благодаря этому можно проверить, содержит ли строка подстроку. Вот пример:

$the_string = «Я на 5 лет старше тебя.»; $the_word = «лет»; $the_character = «Я»; $the_substring = «5 лет»; // Вывод — Слово «лет» есть в данной строке. if (strstr($the_string, $the_word) !== false) { echo ‘Слово «‘.$the_word.'» есть в данной строке.’; } // Вывод — Символ «Я» есть в данной строке. if (strstr($the_string, $the_character) !== false) { echo ‘Символ «‘.$the_character.'» есть в данной строке.’; } // Вывод — Подстрока «5 лет» есть в данной строке. if (strstr($the_string, $the_substring) !== false) { echo ‘Подстрока «‘.$the_substring.'» есть в данной строке.’; }

Для регистронезависимого поиска используйте функцию stristr().

Краткое резюме

  1. Лучший метод поиска символа или слова в строке – PHP функции strpos(). Если нужно провести регистронезависимый поиск, применяйтеstripos(). Обе функции просты в использовании и работают быстрее остальных методов.
  2. Для сложного поиска используйте регулярные выражения. Вы также можете применять их для простого поиска, но они работают медленнее, чем функция strpos().
  3. Регулярные выражения полезны, когда вы ищете точное вхождение слова. Например, при поиске слова “сто” функция strpos() также вернёт значение TRUE, если строка содержит слово “Место”. С другой стороны, можно использовать выражение b в функции preg_match(), которая в таком случае возвратит FALSE.
  4. Используйте strstr() для регистрозависимого поиска и stristr() для регистронезависимого.

Данная публикация представляет собой перевод статьи «Best way to check if a string contains a specific word or substring in PHP» , подготовленной дружной командой проекта Интернет-технологии.ру

Еще не голосовали рейтинг из ХорошоПлохо Ваш голос принят>Учебник по PHP 4

Поиск подстроки с использованием функции strpos

Функция strpos возвращает позицию первого вхождения подстроки.

Пример:

$mystring = ‘abc’; $findme = ‘a’; $pos = strpos($mystring, $findme); // Заметьте, что используется ===. Использование == не даст верного // результата, так как ‘a’ находится в нулевой позиции. if ($pos === false) { echo «Строка ‘$findme’ не найдена в строке ‘$mystring'»; } else { echo «Строка ‘$findme’ найдена в строке ‘$mystring'»; echo » в позиции $pos»; }

Источник: Документация по strpos

Функция возвращает либо порядковый номер первого символа подстроки в исходной строке, либо false, в случае если ничего не найдено.

При использовании этой функции, следует уделить особое внимание тому, что она может вернуть 0, в качестве результата, что говорит о нахождении подстроки в самом начале исходной строки. Поэтому нужно использовать троекратный знак равно $pos === false, для проверки успешности поиска.
Остальные «фишки» операторов сравнения описаны здесь: операторы сравнения.

Для этой функции существует регистронезависимый аналог: stripos

Еще одна функция для этой задачи: strrpos. Она находит последнее вхождение подстроки.
У нее, разумеется, тоже имеется регистронезависимый вариант: strripos

Если функция strpos не подходит для вашей цели, то найдите другой инструмент.
Для работы со строками существует также масса функций, о существовании которых необходимо знать: функции для работы со строками.

php. Поиск в строке


Задача:
Требуется узнать, содержит ли строка заданное слово или другую строку.
Например:
У нас есть некий текст(В данном примере взят текст Lorem ipsum). И необходимо определить, содержит ли данный текст заданное слово(В примере осуществляется поиск слова ‘esse’).
Решение:
Для решения данной проблемы можно воспользоваться встроенной функцией mb_strpos().
$text = ‘Классический текст Lorem Ipsum, используемый с XVI века «Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.»‘; $find = ‘esse’; if (($position = mb_strpos($text, $find, 0, ‘UTF-8’)) !== false) { echo ‘Слово ‘ . $find . ‘ найдено в тексте в позиции ‘ . $position . ‘!’; } else { echo ‘Слово ‘ . $find . ‘ не найдено в тексте!’; }
В данном примере был взят текст Lorem ipsum и присвоен переменной $text.
После чего переменной $find присвоено значение в виде слова esse (Это слово, которое нам необходимо найти тексте).
Функция mb_strpos() осуществляет поиск позиции первого вхождения одной строки в другую.
Если слово было найдено, то mb_strpos() вернет позицию первого вхождения.
В случае если слово не удалось найти в тексте, mb_strpos() возвращает false.
Но если строка начинается со слова по которому осуществляется поиск, то mb_strpos() вернет значение 0.
По этому, чтобы отличить возвращаемое значение false и 0, необходимо использовать точную, тождественную проверку на равенство с учетом типа.
mb_strpos($text, $find, 0, ‘UTF-8’)) !== false
В функцию mb_strpos() первым параметром передаем текст, в котором будет осуществляться поиск.
Вторым параметром передается слово, которое необходимо найти.
Третий параметр указывает смещение начала поиска (Если он не задан, используется 0. Если значение отрицательно, отсчет идет с конца строки).
Четвертый параметр необходим для указания символьной кодировки (Если он не задан, то будет использовано значение внутренней кодировки).


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *