Синтаксис регулярного выражения
Регулярное выражение описывает одну или несколько строк, по которым выполняется сопоставление при поиске в тексте. Такие выражения выполняют роль шаблонов символов, используемых для поиска в строках.
Регулярное выражение состоит из обычных знаков (например букв от "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".