SALEX / СТАТЬИ / РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ

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

Типы данных 
MySQL  

Настройка Apache 
httpd.conf prefork 

Транслит 

Рекламные 
термины 

HDMI 

LCD-технологии 

Поколения E-Ink 

Видеоформаты 

Фототехника: 
Объективы 

Стандарты 
в бильярде 

Электропроводка 

Уровни шума и 
звукоизоляция 

Что брать 
в роддом 

Магазины 
пряжи 

Специальные символы и конструкции, используемые в регулярных выражениях на 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.

Опережающие, ретроспективные проверки и негативный прогноз (Lookahead Assertion):

Заглядывание вперед:
foo(?=bar) - совпадет с foo только перед bar, при этом сама строка bar не войдет в найденный результат.

Отрицательное заглядывание вперед:
foo(?!bar) - совпадет с foo, только, если после этой строки не следует bar.

Ретроспективная проверка:
(?<=foo)bar - совпадет с bar только после foo, при этом сама строка foo не войдет в найденный результат.

Отрицательное заглядывание назад:
foo(?<!bar) - совпадет с bar, только если перед этой строкой нет foo.


Copyright © 2003,2010,2012,2023 by Alexey Slizkov
При воспроизведении информации указание автора и ссылка на источник обязательны!
 знакомства 
я
ищу
лет-


 SALEX.RU · РАЗНОЕ · ОБОИ · 3D-ГРАФИКА · СТАТЬИ · SOFT · ОТКРЫТКИ