Синтаксис регулярного выражения

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

Регулярное выражение состоит из обычных знаков (например букв от "a" до "z") и специальных знаков, известных как метасимволы.

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

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

Примечание

Для поиска этих специальных символов необходимо поставить перед ними escape-символ — обратную косую черту "\".Например, чтобы выполнить поиск символа литерала "+", следует использовать выражение "\+".

Метасимволы

Назначение

Пример

*

Соответствует предыдущему символу или части выражения, повторяющимся нуль или более раз.

Аналогично параметру {0,}.

Выражение zo* соответствует строкам "z" и "zoo".

+

Соответствует предыдущему символу или части выражения, повторяющимся один или более раз.

Аналогично параметру {1,}.

Выражение zo+ соответствует строкам "zo" и "zoo", но не соответствует строке "z".

?

Соответствует предыдущему символу или части выражения, повторяющимся нуль или один раз.

Аналогично параметру {0,1}.

Если символ "?" следует за любым другим квантором (*, +, ?, {n}, {n,} или {n,m}), то соответствующий шаблон является нежадным. "Нежадный" шаблон соответствует наименьшей возможной части искомой строки. "Жадный" шаблон по умолчанию соответствует наибольшей возможной части искомой строки.

Выражение zo? соответствует строкам "z" и "zo", но не соответствует строке "zoo".

Выражение o+? соответствует отдельному символу "o" в строке "oooo", а выражение o+ соответствует всем символам "o".

Выражение do(es)? соответствует "do" в строках "do" или "does".

^

Соответствует позиции в начале строки, в которой выполняется поиск. Если символ m (поиск в нескольких строках) имеет флаги, то символ "^" также соответствует позиции после символов "\n" и "\r".

При использовании в качестве первого символа в выражении в квадратных скобках символ "^" используется для отрицания набора символов.

Выражение ^\d{3} соответствует трем цифрам в начале строки, в которой выполняется поиск.

Выражение [^abc] соответствует всем символам кроме "a", "b" и "c".

$

Соответствует позиции в конце строки, в которой выполняется поиск. Если символ m (поиск в нескольких строках) имеет флаги, то символ "^" также соответствует позиции до символов "\n" и "\r".

Выражение \d{3}$ соответствует трем цифрам в конце строки, в которой выполняется поиск.

.

Совпадает с любым одиночным знаком, кроме знака новой строки "\n". Для получения соответствия любому символу (в том числе символу "\n") используйте шаблон вида [\s\S].

Выражение a.c соответствует строкам "abc", "a1c" и "a-c".

[]

Отмечает начало и конец выражения в квадратных скобках.

Выражение [1-4] соответствует символам "1", "2", "3" или "4". Выражение [^aAeEiIoOuU] соответствует всем символам, которые не являются гласными.

{}

Отмечает начало и конец выражения квантора.

Выражение a{2,3} соответствует строкам "aa" и "aaa".

()

Отмечает начало и конец части выражения. Части выражения можно сохранять для последующего использования.

Выражение A(\d) соответствует строкам от "A0" до "A9". Цифра сохраняется для последующего использования.

|

Указывает на возможность выбора одного из двух или нескольких элементов.

Выражение z|food соответствует строкам "z" или "food". Выражение (z|f)ood соответствует строкам "zood" или "food".

/

Обозначает начало или конец регулярного выражения из литералов в JScript. Для указания параметров поиска после символа "/" можно добавить флаги, состоящие из одного символа.

Выражение /abc/gi является регулярным выражением JScript, состоит из литералов и соответствует строке "abc". Глобальный флаг g после шаблона указывает на то, что следует найти все вхождения шаблона, а флаг i (не учитывать регистр) делает поиск независимым от регистра.

\

Помечает следующий знак как специальный знак, литерал, обратную ссылку или восьмеричный escape-знак.

Выражение \n соответствует символу новой строки. Выражение \( соответствует символу "(". Выражение \\ соответствует символу "\".

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

Метасимволы

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

Метасимволы

Назначение

Пример

\b

Соответствует границе слова, то есть позиции между словом и пробелом.

Выражение er\b соответствует сочетанию er в слове never, а не в слове verb.

\B

Соответствует позиции, отличной от границы слова.

Выражение er\B соответствует сочетанию er в слове verb, а не в слове never.

\d

Соответствует знаку цифры.

Аналогично параметру [0-9].

В строке "12 345" выражение \d{2} будет соответствовать строкам "12" и "34". Выражение \d соответствует символам "1", 2", "3", "4" и "5".

\D

Соответствует любому знаку, не являющемуся цифрой.

Аналогично параметру [^0-9].

Выражение \D+ совпадает со строками "abc" и " def" в строке "abc123 def".

\w

Соответствует одному из следующих символов: A-Z, a-z, 0-9 и подчеркиванию.

Аналогично параметру [A-Za-z0-9_].

В строке "The quick brown fox…" выражение \w+ соответствует словам "The", "quick", "brown" и "fox".

\W

Соответствует любому символу кроме A-Z, a-z, 0-9 и подчеркивания.

Аналогично параметру [^A-Za-z0-9_].

В строке "The quick brown fox…" выражение \W+ соответствует строке "…" и всем пробелам.

[xyz]

Набор знаков. Совпадает с любым из указанных символов.

Выражение [abc] соответствует символу "a" в слове "plain".

[^xyz]

Отрицательный набор знаков. Соответствует любому не указанному символу.

Выражение [^abc] соответствует символам "p", "l", "i" и "n" в слове "plain".

[a-z]

Диапазон знаков. Соответствует любому знаку в указанном диапазоне.

Выражение [a-z] соответствует любому буквенному символу в нижнем регистре из диапазона от "a" до "z".

[^a-z]

Отрицательный диапазон символов. Соответствует всем символам, которые отсутствуют в указанном диапазоне.

Выражение [^a-z] соответствует всем символам, которые отсутствуют в диапазоне от "a" до "z".

{n}

Строго соответствует числу раз, равному n. n — это неотрицательное целое число.

Выражение o{2} не соответствует символу "o" в слове "Bob", но соответствует двум символам "o" в слове "food".

{n,}

Соответствует числу раз, равному или превышающему n. n — это неотрицательное целое число.

* равно {0,}.

+ равно {1,}.

Выражение o{2,} не соответствует символу "o" в слове "Bob", но соответствует всем символам "o" в слове "foooood".

{n,m}

Соответствует числу раз, равному или превышающему n и не превышающему m. n и m — это неотрицательные целые числа, где n <= m. Между запятой и числами нельзя вставлять пробел.

? равно {0,1}.

В строке"1234567" выражение \d{1,3} соответствует строкам "123", "456" и "7".

(pattern)

Находит соответствие шаблону и сохраняет его. Сохраненное соответствие можно получить из элементов массива, возвращенных методом exec Method в JScript. Для получения соответствия знакам скобок "(" и ")" используйте сочетания "\(" или "\)".

Выражение (Chapter|Section) [1-9] соответствует строке "Chapter 5", при этом строка "Chapter" сохраняется для последующего использования.

(?:pattern)

Находит соответствие шаблону, но не сохраняет соответствие. Таким образом, соответствие не сохраняется для дальнейшего использования. Это удобно использовать для объединения частей шаблона со знаком "или" (|).

Выражение industr(?:y|ies) равно industry|industries.

(?=pattern)

Положительный поиск (positive lookahead). После нахождения соответствия поиск следующего соответствия начинается до найденного текста. Соответствие не сохраняется для последующего использования.

Выражение ^(?=.*\d).{4,8}$ применяет ограничение, согласно которому длина пароля должна составлять от 4 до 8 символов, а пароль должен содержать минимум одну цифру.

В этом шаблоне .*\d обнаруживает любое количество символов, за которыми следует цифра. Для строки "abc3qr" будет найдено соответствие "abc3".

Если поиск начинается перед совпадением, а не после него, то выражение .{4,8} соответствует строке длиной 4-8 символов. Это соответствует строке "abc3qr".

Символы ^ и $ задают позиции в начале и в конце строки, по которой выполняется поиск. Они используются, чтобы предотвратить совпадение, если строка, по которой выполняется поиск, содержит какие-то знаки до начала или после конца соответствия.

(?!pattern)

Отрицательный поиск вперед (negative lookahead). Соответствует строке, которая не совпадает с шаблоном. После нахождения соответствия поиск следующего соответствия начинается до найденного текста. Соответствие не сохраняется для последующего использования.

Выражение \b(?!th)\w+\b соответствует словам, которые не начинаются с сочетания "th".

В шаблоне выражение \b соответствует границе слова. Для строки " quick " совпадением будет первый пробел. Выражение (?!th) соответствует строке, не равной "th". Совпадением будет строка "qu".

Если поиск начат до этого совпадения, то выражение \w+ будет соответствовать слову. Совпадением будет строка "quick".

\cx

Соответствует управляющему символу, указанному с помощью x. Значение x должно находиться в диапазоне от "A" до "Z" или от "a" до "z". В противном случае символ "с" определяется как буквенный символ "c".

Выражение \cM соответствует сочетанию CTRL+M или знаку возврата каретки.

\xn

Соответствует n, где n — шестнадцатеричный escape-знак. Шестнадцатеричные escape-знаки должны иметь длину ровно две цифры. Позволяет использовать в регулярных выражениях ASCII-коды.

Выражение \x41 соответствует символу "A". Выражение \x041 соответствует строке "\x04", за которой следует символ "1", (так как n должен содержать 2 цифры).

\num

Соответствует num, где num — положительное целое число. Это ссылка на сохраненные соответствия.

Выражение (.)\1 соответствует двум последовательным одинаковым символам.

\n

Указывает на обратную ссылку или восьмеричный escape-знак. Если перед \n следует не менее n сохраненных частей выражений, то n является обратной ссылкой. В противном случае n является восьмеричным escape-знаком, если n является цифрой в восьмеричном формате (0 – 7).

Выражение (\d)\1 соответствует двум последовательным одинаковым цифрам.

\nm

Указывает на обратную ссылку или восьмеричный escape-знак. Если перед \nm содержится не менее nm сохраненных частей выражений, то nm является обратной ссылкой. Если перед \nm содержится не менее n сохраненных частей выражений, то n является обратной ссылкой, после которой стоит литерал m. Если ни одно из указанных условий не выполняется, то \nm соответствует восьмеричному escape-символу nm, когда n и m являются цифрами в восьмеричном формате (0 – 7).

\11 соответствует знаку табуляции.

\nml

Соответствует восьмеричному escape-знаку nml, когда n является цифрой в восьмеричном формате (0-3), а m и l являются цифрами в восьмеричном формате (0 – 7).

\011 соответствует знаку табуляции.

\un

Соответствует n, где n — это знак Юникода, выраженный в виде четырех шестнадцатеричных цифр.

Выражение \u00A9 соответствует символу авторского права "©".

Непечатаемые символы

В следующей таблице перечислены escape-последовательности, представляющие непечатаемые символы.

Знак

Соответствия

Эквивалентен

\f

Символ перевода страницы.

\x0c и \cL.

\n

Последовательность символов перехода на новую строку.

\x0a и \cJ.

\r

Символ возврата каретки.

\x0d и \cM.

\s

Любой знак пробела. В число таких знаков входит пробел, табуляция и перевод страницы.

[ \f\n\r\t\v]

\S

Любой символ, не являющийся пробелом.

[^ \f\n\r\t\v]

\t

Символ табуляции.

\x09 и \cI.

\v

Символ вертикальной табуляции.

\x0b и \cK.

Очередность применения

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

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

Оператор или операторы

Описание

\

Escape-символ

(), (?:), (?=), []

Круглые и квадратные скобки

*, +, ?, {n}, {n,}, {n,m}

Кванторы

^, $, \любой метасимвол

Привязки и последовательности

|

Чередование

Символы имеют более высокий приоритет, чем оператор чередования, поэтому соответствием для "m|food" будет "m" или "food".

См. также

Основные понятия

Создание регулярного выражения