Как происходит PHP поиск в строке с помощью встроенного инструментария

Что такое строки

Прежде, чем окунаться в данную тему «по уши», сразу предупреждаю, что будет немного нудно. Честно говоря, я сам могу заскучать при написании этого материала. Так что сразу прошу меня простить, если начну дурачиться :).

Теперь разберемся, что собой представляют строки. Точнее, как к ним «относится» 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: сортировка массива

Читайте также:  Что означает ошибка сервера 504 Gateway Time Out и как ее исправить

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

Функции 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.'» есть в данной строке.’; }

Читайте также:  Ошибка 400: что такое и как можно исправить

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

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

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

Рейтинг
( Пока оценок нет )
Блог о программировании, продвижении и дизайне.
Adblock
detector