Perl Compatible Regular Expressions, PCRE)
Приложение 4. Perl-совместимые регулярные выражения |
Краткое описание, которое приводится тут, имеет справочный характер.
Регулярное выражение - это шаблон для поиска подстроки, который должен совпасть с подстрокой слева направо в строке поиска. Большинство символов в этом шаблоне представлены сами собою, и при поиске просто проверяется наличие этих символов в строке поиска в заданной последовательности. В качестве простейшего примера можно привести шаблон для поиска «шустрая лиса», который должен совпасть с аналогичным набором символов в строке поиска. Мощь регулярных выражений состоит в том, что помимо обычных символов, они позволяют включать в шаблоны альтернативные варианты выбора и повторяющиеся фрагменты с помощью метасимволов. Эти метасимволы ничего не значат сами по себе, но при использовании их в регулярных выражениях, они обрабатываются особым образом.
Существует два различных набора метасимволов:
1. Распознаваемые в любой части шаблона, не заключенной в квадратные скобки
2. Распознаваемые в частях шаблона, заключенных в квадратные скобки
К метасимволам, распознаваемым вне квадратных скобок относятся следующие:
\ |
общее обозначение для escape-последовательностей. Имеют различное использование, рассмотрены ниже |
^ |
совпадает с началом фрагмента для поиска или перед началом строки в многострочном режиме |
$ |
совпадает с концом фрагмента для поиска или перед концом строки в многострочном режиме |
. |
символьный класс, содержащий все символы. Этот метасимвол, совпадает с любым символом кроме символа новой строки по умолчанию. |
[...] |
символьный класс. Совпадение происходит с любым элементом из заданного в квадратных скобках списка |
| |
метасимвол означающий «или». Позволяет объединить несколько регулярных выражений в одно, совпадающее с любым из выражений-компонентов |
(...) |
ограничение подстроки поиска в общем шаблоне поиска |
? |
совпадает с одним необязательным символом |
* |
совпадает с неограниченным количеством любых необязательных символов |
+ |
совпадает с неограниченным количеством символов. Для совпадения требуется хотя бы один произвольный символ |
{мин, макс} |
интервальный квантификатор - требуется минимум экземпляров, допускается максимум экземпляров. |
br>
Часть шаблона, заключенная в квадратные скобки называется символьным классом. В описании символьного класса можно использовать только следующие метасимволы:
\ | Escape - символ |
^ | Инвертированный символьный класс, мета-символ обязательно должен быть первым символом в описании класса. Совпадение будет происходить с любыми символами, не входящими в символьный класс |
- | Используется для обозначения интервала символов |
[...] | Ограничитель символьного класса |
Обратный слеш имеет несколько вариантов использования. В случае если вслед за ним следует символ, не обозначающий букву алфавита, обратный слеш выполняет функцию экранирования и отменяет специальное значение, которое может иметь этот символ. Такое использование этого метасимвола возможно как внутри символьного класса, так и вне его. В качестве примера, если необходимо найти символ «*», то используется следующая запись в шаблоне «\*». В случае необходимости экранировать сам символ «\» используется запись «\\».
Второй вариант использования этого мета-символа - для описания управляющих символов в шаблоне. Можно использовать следующие escape-последовательности:
\а сигнал
\cx «control-x», где х - любой символ
\е ASCII-символ escape
\f подача бумаги
\n новая строка
\r возврат курсора
\t табуляция
\xhh шестнадцатиричный код символа hh
\ddd восьмиричный код символа ddd
Третий вариант - для определения специфических символьных классов
\d любое десятичное число [0-9]
\s пропуск, обычно [ \f\n\r\t] Первый символ квадратных скобках - пробел
\w символ слова, обычно [a-zA-Z0-9_]
\D \S \W отрицание \d \s \w
Четвертый вариант - для обозначения мнимых символов. В PCRE существуют символы, которые соответствуют не какой-либо литере или литерам, а означают выполнение определенного условия, поэтому в английском языке они называются утверждениями (assertion). Их можно рассматривать как мнимые символы нулевого размера, расположенные на границе между реальными символами в точке, соответствующей определенному условию. Эти утверждения не могут использоваться в символьных классах (\b имеет дополнительное значение и обозначает возврат каретки внутри символьного класса)
\b граница слова
\B отсутствие границы слова
\A «истинное» начало строки
\Z «истинный» конец строки или позиция перед символом начала новой строки,
расположенного в «истинном» конце строки
\z «истинный» конец строки