Специальные символы и конструкции, используемые в регулярных выражениях на PHP и Perl
Используемые символы:
СИМВОЛ
ЗНАЧЕНИЕ
ПРИМЕР
ОПИСАНИЕ ПРИМЕРА
.
любой символ
/ab.c/
соответствует "ab", затем любой символ, а потом "c"
\w
словесный символ (обычно все буквы, цифры и знак подчеркивания)
/ab\wcd/
соответствует "ab", затем один словесный символ, а потом "cd"
\W
несловесный символ
/\W/
аналог [^\w]
\d
цифра
/\d/
аналог [0-9]
\D
нецифровой символ
/\D/
аналог [^0-9]
\n
перевод строки
\t
табуляция
\r
возврат каретки
\s
пробельный символ (пробел, табуляция, новая строка)
\S
непробельный символ
\b
граница слова
/\bis\b/
соответствует "this is page", но не соответствует "list"
\B
не граница слова
/\Bis\B/
соответствует "list", но не соответствует "this is page"
^
начало строки
/^mailto:/
соответствует "mailto:" в начале строки
$
конец строки
/\.ru$/
соответствует ".ru" в конце строки
\
применяется для использования специальных символов
/\./, /\//, /\[/, /\(/
использование ".", "/", "[" и "(" соответственно
Используемые конструкции:
КОНСТРУКЦИЯ
ЗНАЧЕНИЕ
ПРИМЕР
ОПИСАНИЕ ПРИМЕРА
[…]
любой символ из данного множества "…"
/[abc]d/
соответствует "ad", "bd", "cd"
[^…]
отрицание символов из данного множества "…"
/[^abc]/
соответствует всему, что не содержит "a", "b", "c"
(…)
группировка элементов "…" с их запоминанием в переменных 1, 2, 3 и т.д.
/ab(cd)*e(w)x/
в переменную 1 запомнено "cd", которое может повторится сколько угодно раз, а в переменную 2 запомнено "w"
(?:…)
незахватывающие скобки
/(?:abc)?/
проверяется, присутствует или нет "abc", но не запоминает в переменную
x(?=y)
совпадает с "x" только в том случае, если после "x" следует "y" (не передает в результат)
/Jack(?=Sprat|Frost)/
совпадает с "Jack" только тогда, когда следом идет "Sprat" или "Frost", однако ни "Sprat", ни "Frost" не являются частью результата совпадения
x(?!y)
совпадает с "x" только в том случае, если после "x" не следует "y" (не передает в результат)
/\d+(?!\.)/
совпадает с числом только в том, случае, если после него нет точки (совпадает с 141, но не совпадает с 3.141)
…|…|…
одна из альтернатив
/ftp|http|mailto/
соответствует одному из вариантов: "ftp", "http", "mailto"
…*
повторение образца "…" 0 или более раз
/,*/
соответствует всему (любому количеству любого содержания)
…?
повторение образца "…" 0 или 1 раз
/(http:\/\/)?.*\.htm/
соответствует строке, в которой в начале может быть "http://", затем любое количество любых символов, а потом ".htm"
…+
повторение образца "…" 1 или более раз
/\s+/
соответствует хотя бы одному пробельному символу
…{n,m}
повторение образца "…" от n до m раз
/\d{3,5}/
соответствует от трех до пяти значной цифре
…{n}
повторение образца "…" ровно n раз
/5{3}/
соответствует "555"
…{n,}
повторение образца "…" n и более раз
/\w{3,}/
соответствует слову из трех и более символов
…-…
указывает диапазон символов от "…" до "…"
/a[1-5]bc[D-H]/
соответствует "a", затем цифра от "1" до "5", затем "bc", а потом заглавная буква от "D" до "H"
В обозначении конструкций использовалось обозначение "…", соответствующее множеству любых символов. Модификаторы (Pattern Modifiers): [добавлено 13.11.2010]
СИМВОЛ
НАЗНАЧЕНИЕ
i
PCRE_CASELESS Делает нечувствительным к регистру. Большие (прописные) и маленькие (строчные) буквы в выражении не различаются и считаются одинаковыми.
m
PCRE_MULTILINE Указывает на то, что текст, по которому ведется поиск, должен рассматриваться как состоящий из нескольких строк. По умолчанию механизм регулярных выражений рассматривает текст как одну строку вне зависимости от того, чем она является на самом деле. Соответственно метасимволы "^" и "$" указывают на начало и конец всего текста. Если же этот модификатор указан, то они будут указывать соответственно на начало и конец каждой строки текста.
s
PCRE_DOTALL Если данный модификатор используется, метасимвол "." (точка) в шаблоне соответствует всем символам, включая перевод строк. Без него - всем, за исключением переводов строк. По умолчанию метасимвол "." не включает в свое определение символ перевода строки, т.е. для многострочного текста выражение /.+/ вернет только первую строку, а не весь текст, как ожидается. Указание этого модификатора снимает это ограничение. Класс символов, построенный на отрицании, например [^a], всегда соответствует переводу строки, независимо от наличия этого модификатора.
e
PREG_REPLACE_EVAL Если данный модификатор используется, preg_replace() после выполнения стандартных подстановок в заменяемой строке интерпретирует ее как PHP-код и использует результат для замены искомой строки. Только preg_replace() реагирует на данный модификатор; остальными функциями он игнорируется. Пример PHP преобразует все HTML-теги к верхнему регистру: preg_replace("/(<\/?)(\w+)([^>]*>)/e","'\\1'.strtoupper('\\2').'\\3'",$html_body)
U
PCRE_UNGREEDY Делает все количественные метасимволы "не жадными". Не совместим с Perl. Аналогично простановке "?" после каждого количественного метасимвола.
D
PCRE_DOLLAR_ENDONLY Если данный модификатор используется, метасимвол "$" в шаблоне соответствует только окончанию обрабатываемых данных. Без этого модификатора метасимвол "$" соответствует также позиции перед последним символом, в случае, если им является перевод строки (но не распространяется на любые другие переводы строк). Не совместим с Perl. Данный модификатор игнорируется, если используется модификатор m.
Тут приведены лишь наиболее часто используемые модификаторы регулярных выражений. Еще бывают: A, S, x, X, J, u.