Php регулярные выражения поиск символов

Регулярные выражения

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

Правила составление шаблона (pattern)

Границы шаблона должны обозначаться определенными символами, часто используют «/«, но я предпочитаю использовать «#» потому, что от обилия прямых/обратных слешей может в глазах зарябить, а «решетки» обычно больше нигде не используются. Итак: «#ТутТелоРегулярногоВыражения#«

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

Это выражение предназначено для получения параметров в строке URL. В начале строки идет спецсимвол «^» — это означает начало строки. Далее идет «/catalog/» — тут нет спецсимволов, это просто текст, который должен содержатся в строке. Затем встретили круглые скобки, т.е. дошли до первого подвыражения. В квадратных скобках обозначаются множество символов, которые могут быть в строке в этом месте. Знак «» означает перечисление. Знак «\» экранирует специальные символы. Таким образом, в первом подвыражении у нас могут идти БОЛЬШИЕ и маленькие буквы латинского алфавита, цифры от 0 до 9, знак подчеркивания, тире и точка. Тире и точка — это спецсимволы, но здесь они экранированы, поэтому здесь это просто символы. После квадратных скобок идет знак «+» — это значит предыдущий символ (а у нас это множество символов заданное в квадратных скобках) может идти 1 или больше раз. Затем идет «/» — это просто символ, и аналогичное второе подвыражение. Затем идет «\.html«, что означает текст «.html«. А затем спец символы «.*» точка означает любой символ, а звездочка любое количество предыдущего символа. Т.е. после «.html» может идти все что угодно.

Читайте также:  Python telebot bot polling

Указание количества, квантификаторы

Выше мы уже рассмотрели такие символы, указывающие количество предыдущих символов, как + и *. Приведем все возможности указания количества:

, где Х это число повторений, пример: 2 , это значит что здесь должно быть 5 цифр
, где X минимальное количество, Y — максимальное количество повторений. Пример 4 — 1 или 2 цифры. 6 -0, 1 или 2 цифры. 9 — 2 и более цифр
* любое количество символов (включая 0 символов)
+ 1 и более символов
? 1 или 0 символов

Спецсимволы

\ экранирование спецсимвола
\\ обратный слеш
| Метасимвол выбора (или или)
^ Метасимвол начала строки
$ Метасимвол конца строки
\n Символ перевода строки (шестнадцатеричный код 0x0A)
\r Символ возврата каретки (шестнадцатеричный код 0x0D)
\t Символ табуляции (шестнадцатеричный код 0x09)
. Точка. Любой символ.

Для некоторых групп символов есть специальные сокращения:

\d Цифра (0-9), вместо 2
\D Не цифра (любой символ кроме символов 0-9)
\s Пустой символ (обычно пробел и символ табуляции)
\S Непустой символ (все, кроме символов, определяемых метасимволом \s)
\w «Словарный» символ (символ, который используется в словах. Обычно все буквы, все цифры и знак подчеркивания (‘_‘))
\W Все, кроме символов, определяемых метасимволом \w

«Жадность»

Рассмотрим понятие жадности регулярного выражения. Например есть строка:

Нужно получить ссылки, для этого составили выражение:

Вроди все верно, подвыражение подходит под:

Но оно также подходит под:

— его то мы и получим, т.к. регулярные выражения по умолчанию «жадные». Снять жадность можно с помощью модификатора «U«, вот так:

Модификаторы

После регулярного выражения могут идти модификаторы: «#ТутТелоРегулярногоВыражения#ТутМодификаторы» Виды модификаторов:

i Включает режим case-insensitive, т.е. большие и маленькие буквы в выражении не различаются.
m Указывает на то, что текст, по которому ведется поиск, должен рассматриваться как состоящий из нескольких строк. По умолчанию механизм регулярных выражений рассматривает текст как одну строку вне зависимости от того, чем она является на самом деле. Соответственно метасимволы ‘^’ и ‘$’ указывают на начало и конец всего текста. Если же этот модификатор указан, то они будут указывать соответственно на начало и конец каждой строки текста.
s По умолчанию метасимвол ‘.‘ не включает в свое определение символ перевода строки. Указание этого модификатора снимает это ограничение.
U Снимает жадность регулярного выражения
u Включает работу регулярных выражений с кириллицей в UTF-8, иначе работает не корректно.

php Функции для работы с регулярными выражениями

Ссылка на полный список функций. Тут приведу краткое описание некоторых функций. Внимание. описываемые ниже функции имеют больше возможностей, чем описываю я, все возможности можно посмотреть, перейдя по приведенной чуть выше ссылке.

preg_match

Выполняет проверку на соответствие регулярному выражению:

 preg_match ($pattern,$subject); //вернет: //0 - соответствие не найдено //1 - соответствие найдено //false - произошла ошибка 

preg_match_all

Выполняет глобальный поиск шаблона в строке:

 $res = array(); preg_match_all ($pattern,$subject,$res); 

Возвращает количество найденных вхождений шаблона (которое может быть и нулем) либо FALSE, если во время выполнения возникли какие-либо ошибки. В переменную $res попадет результат поиска в виде массива: [0] содержит массив полных вхождений шаблона, элемент [1] содержит массив вхождений первой подмаски, и так далее. Для удобства работы с регулярными выражениями я создал страницу, где в режиме online можно поработать с функцией preg_match_all

preg_replace

 preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] ); 

Каждое значение может быть строкой или массивом, в случае, если $subject массив — возвращается массив, иначе строка

preg_split

Разбивает строку по регулярному выражению:

 preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] ); 

Возвращает массив, состоящий из подстрок заданной строки subject, которая разбита по границам, соответствующим шаблону pattern.

Источник

Оцените статью