Что такое строки
Прежде, чем окунаться в данную тему «по уши», сразу предупреждаю, что будет немного нудно. Честно говоря, я сам могу заскучать при написании этого материала. Так что сразу прошу меня простить, если начну дурачиться :).
Теперь разберемся, что собой представляют строки. Точнее, как к ним «относится» PHP. В данном языке строки представляют собой массивы, состоящие из набора символов. Так это или нет, узнаем на практике по ходу рассмотрения примеров.
Поиск подстроки в строке с помощью strpos
В PHP есть функция под названием strpos, возвращающая позицию 1-го вхождения символа подстроки. Давайте рассмотрим небольшой пример её работы:
$mystring=’abc’;$findme=’a’;$pos=strpos($mystring,$findme);// Обратите внимание, что применяется ===. Применение == не даст нам верного // результата, т. к. ‘a’ находится в нулевой позиции.if($pos===false){echo»Строка ‘$findme’ не найдена в строке ‘$mystring'»;}else{echo»Строка ‘$findme’ найдена в строке ‘$mystring'»;echo» в позиции $pos»;}
Таким образом, PHP-функция возвращает нам или порядковый номер 1-го символа подстроки в исходной строке, или false, если ничего не найдено.
Применяя эту функцию, учтите, что она может вернуть вам в качестве результата 0 — в таком случае можно говорить, что подстрока находится в самом начале нашей исходной строки. Именно поэтому следует применять троекратный знак равно, о котором упомянуто в коде ($pos === false). Это нужно для проверки успешности поиска.
Поиск подстроки в строке с помощью stripos
Эта функция является регистронезависимым аналогом strpos. Она пригодится, если захотите найти последнее вхождение подстроки. Кстати, регистронезависимый вариант есть и у неё — strripos.
Поиск символа в строке — использование регулярных выражений
Также для поиска можно использовать регулярные выражения. Они лучше подходят для случаев, когда вы ищете в строке более сложные конструкции.
Но помните, что функция 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.'» есть в данной строке.’; } Изучаем PHP: сортировка массива
Использование регулярных выражений для поиска точного вхождения слова
Функции 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().
Краткое резюме
- Лучший метод поиска символа или слова в строке – PHP функции strpos(). Если нужно провести регистронезависимый поиск, применяйтеstripos(). Обе функции просты в использовании и работают быстрее остальных методов.
- Для сложного поиска используйте регулярные выражения. Вы также можете применять их для простого поиска, но они работают медленнее, чем функция strpos().
- Регулярные выражения полезны, когда вы ищете точное вхождение слова. Например, при поиске слова “сто” функция strpos() также вернёт значение TRUE, если строка содержит слово “Место”. С другой стороны, можно использовать выражение b в функции preg_match(), которая в таком случае возвратит FALSE.
- Используйте strstr() для регистрозависимого поиска и stristr() для регистронезависимого.
Как проверить наличие слова, фразы или текста в строке на PHP
В PHP существуют два способа, с помощью которых можно узнать наличие искомой фразы в строке.
Первый способ – это регулярные выражения. Здесь мы используем функцию «preg_match» для обхода по всему тексту.
Помимо этого, есть и второй способ – это функция «strpos», которая возвращает позицию первого вхождения указанной фразы.
Если вы ищете небольшие участки текста, то в таком случае для использования предпочтителен второй вариант — так как он менее ресурсоемкий.
- https://webformyself.com/php-poisk-v-stroke-obzor-dostupnogo-instrumentariya/
- https://otus.ru/nest/post/1144/
- https://www.internet-technologies.ru/articles/kak-v-php-proverit-soderzhit-li-stroka-opredelennoe-slovo-ili-simvol.html
- https://www.pandoge.com/stati-i-sovety/kak-proverit-nalichie-slova-frazy-ili-teksta-v-stroke-na-php-javascript