Php regexp все символы

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

Регулярное выражение представляет собой «строку-шаблон», написанную на формальном языке поиска, по которой производится поиск в целевом строковом представлении (контенте). «Строка-шаблон» состоит из строковых, цифровых и специальных символов, а также заключается между ограничителями шаблона ( /RegExp/ ). В роли ограничителей шаблона нельзя использовать буквы и цифры, чаще всего используются / , # и ~ .

В шпаргалке описываются регулярные выражения, работающие с библиотекой PCRE.

Метасимволы

Зарезервированные специальные символы. Для использования метасимвола, как обычного литерала, необходимо экранировать его, для этого нужно поставить \ непосредственно перед экронируемым метасимволом, например . — это совпадение с любым символом кроме пробельного, а \. — это совпадение только с точкой.

Позиционные:

  • ^ — начало строки ( /^RegExp/ ), внутри символьного класса трактуется как литерал или знак отрицания (зависит от расположения в наборе).
  • $ — конец строки ( /RegExp$/ ), внутри символьного класса трактуется как литерал.
  • \A — начало текста ( /\ARegExp/ ), похож на ^ , но в мультистроковом режиме \A будет всегда обозначать начало всего текста, а ^ — начало каждой строки;
  • \z — конец текста ( /RegExp\z/ ), похож на $ , но в мультистроковом режиме \z будет всегда обозначать конец всего текста, а $ — конец каждой строки;
  • \Z — похож на \z , но если последним символом текста является перевод строки, то \Z будет занимать позицию, находящуюся перед последним переводом строки, а \z всегда будет на позиции в самом конце текста;
  • \b — обозначает границу слова, для обращения к первой букве слова www «W» используется так ( \bw ), а к последней букве так ( w\b );
  • \B — обратное от \b , для обращения к средней (второй) букве «w» слова www используется так ( \Bw\B );
  • \G — останавливается на позиции окончания повторяющихся подряд символов, например: \Gw остановится на четвертой позиции после www , при поиске в строке www.example.com .
Читайте также:  Java string adding characters

Группирующие:

  • ( — открывает вложенное выражение;
  • ) — закрывает вложенное выражение;
  • | — логическое «или», может использоваться внутри ( (abc|def|ghi) ) и вне ( abc|def|ghi ) группы.
  • \f — конец страницы;
  • \n — новая строка;
  • \r — возврат каретки;
  • \t — табуляция;
  • \v — вертикальная табуляция.

Квантификаторы (для поиска последовательностей):

  • — точное количество вхождений;
  • — диапазон вхождений от min до max ;
  • ? — ноль или одно вхождение (эквивалентно );
  • + — одно или более одно вхождения (эквивалентно );
  • * — ноль, одно или более одно вхождения (эквивалентно ).

Объединяющие (для символьных классов):

  • [ — открывает символьный класс;
  • ] — закрывает символьный класс;
  • — — задает диапазон символов в символьном классе ( 4 );
  • ^ — если ^ располагается в самом начале, то это означает отрицание всех символов, входящих в состав данного символьного класса ( /[^0-9]/ ), на другой позиции трактуется как литерал;
  • \d — целое число ( 7 );
  • \D — любой символ кроме целочисленного ( [^0-9] );
  • \s — любой пробельный символ ( [\f\n\r\t\v ] );
  • \S — любой символ кроме пробельного ( [^\f\n\r\t\v ] );
  • \w — целое число, буква и подчеркивание ( [a-zA-Z0-9_] );
  • \W — любой символ кроме целого числа, буквы и подчеркивания ( [^a-zA-Z0-9_] ).

Квантификаторы

Располагаются следом за символьным классом, группой или одиночным символом, указывая количество их повторений, например .* обозначает любые символы в любом количестве.

По умолчанию квантификаторы являются «жадными», например если произвести поиск всех тегов в HTML-коде <.*>, то все теги будут трактоваться как один, так как после первого совпадения следующие теги будут соответствовать .* . Для решения задачи нужно или уточнить искомый результат <[^>]*> , или сделать квантификатор «ленивым», поставив ? после квантификатора <.*?>.

Существует еще один «сверхжадный» режим, его еще называют «ревнивым», он является самым быстродейственным и служит для поиска самого длинного варианта. Данный режим полезен для проверки существования подстроки в строке, а также для исключения из результатов поиска нежелаемых совпадений. Для включения «ревнивого» режима нужно поставить + после квантификатора.

Читайте также:  Php mysql from novice

Символьные классы

Наборы различных символов, помещенные в квадратные скобки. В некоторых случаях поведение метасимволов в символьных классах может изменяться по сравнению с их аналогами, находящимися на других позициях «строки-шаблона», например . внутри набора трактуется как литерал.

  • [abc] — любой один символ из трех указанных: «a» или «b» или «c».
  • [^abc] — любые символы кроме трех указанных: «a» или «b» или «c».
  • [a-d] — символы в диапазоне от «a» до «d» (a, b, c, d).
  • [^a-d] — любые символ кроме диапазона от «a» до «d» (a, b, c, d).
  • 7 — целые числа от «0» до «9» (0, 1, 2, 3, 4, 5, 6, 7, 8, 9).
  • [^a-d1-4] — любые символы кроме диапазона букв от «a» до «d» (a, b, c, d) и цифр от «1» до «4» (1, 2, 3, 4).

Группы (подмаски)

Группировка добавляет функционал «обратных ссылок», которые дают возможность запоминать найденные группы символов под порядковыми номерами и обращаться к ним по этим номерам как по ссылкам. Для обращения к обратным ссылкам в «строке-шаблоне» используется обратный слэш и присвоенный номер группе ( \1 ), а для обращения в «строке-замене» — знак доллара ( $1 ). Для примера подставим закрывающий HTML-тег заголовка:

В некоторых случаях дополнительно к цифровым удобно использовать именованные группы ( (?P. ) или ( (?. ) ), например для обработки динамических HTTP-роутов:

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

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

Читайте также:  Form post code html

Подмаска дает возможность применять условия типа if и if-else :

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

Формат Название Пример Результат
(?=. ) Позитивный просмотр вперёд .*(?=\.com) example .com example.org
(. ) Негативный просмотр вперёд .*(?!\.com) example.com example .org
(? Позитивный просмотр назад (? <=example\.).* example. com example. org
(? Негативный просмотр назад (? example.com example.org

Модификаторы (флаги)

Модифицируют поведение регулярного выражения, стоящий перед модификатором — инвертирует его поведение (не распространяется на U ). Флаги указываются после «строки-шаблона» в произвольном порядке ( /RegExp/ugi ).

  • g — ищет все совпадения со «строкой-шаблоном» (по умолчанию поиск останавливается после первого совпадения).
  • i — регистронезависимость («a» и «A» считаются эквивалентными).
  • m — мультистроковость (по умолчанию целевая строка, в котором производится поиск, считается одной строкой).
  • s — однострочность (контент считается одной строкой в отличие от режима по умолчанию, метасимвол . включает в себя пробельные символы).
  • u — поддержка юникода («строка-шаблон» и целевая строка будут обрабатываться в кодировке UTF-8).
  • U — инверсия жадности квантификаторов (по умолчанию квантификаторы становятся «ленивыми», вернуть им «жадность» можно, поставив после квантификатора ? ).
  • x — все неэкранированные пробельные символы, которые находятся вне символьного класса, будут проигнорированы.

Похожие записи

Источник

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