Регулярные выражения -Метасимволы
Метасимволы в регулярных выражениях — это символы с особым значением. Они не представляют литеральные символы, а используются для управления шаблоном сопоставления.
Основные метасимволы
.(точка)
-
Совпадает с любым одиночным символом, кроме перевода строки (
\n) вне любого одиночного символаПример:
a.bСовпадает с "aab", "a1b", "a b" и т. д.
^(каретка)
-
Совпадает с начальной позицией строки
-
Пример:
^abcСовпадает со строками, начинающимися с "abc"
$(знак доллара)
-
Совпадает с конечной позицией строки
-
Пример:
xyz$Совпадает со строками, заканчивающимися на "xyz"
\(обратная косая черта)
-
Экранирующий символ, он заставляет следующий символ потерять своё специальное значение
-
Пример:
\.Совпадает с настоящей точкой, а не с любым символом
Метасимволы класса символов
[](квадратные скобки)
-
Определяет набор символов, совпадает с любым одним символом из него
-
Пример:
[aeiou]Совпадает с любой одной гласной буквой
[^](отрицательный класс символов)
-
Совпадает с любым символом, которого нет в квадратных скобках
-
Пример:
[^0-9]Совпадает с любым нецифровым символом
-(дефис)
-
Представляет диапазон внутри класса символов
-
Пример:
[a-z]Совпадает с любой строчной буквой
Метасимволы квантификаторов
*(звёздочка)
-
Соответствует предыдущему подвыражению ноль или более раз
-
Пример:
ab*cСоответствует "ac", "abc", "abbc" и т. д.
+(знак плюс)
-
Соответствует предыдущему подвыражению один или более раз
-
Пример:
ab+cСоответствует "abc", "abbc", но не "ac"
?(вопросительный знак)
-
Соответствует предыдущему подвыражению ноль или один раз
-
Пример:
colou?rСоответствует "color" и "colour"
{n}(фигурные скобки)
-
Совпадение ровно n раз
-
Пример:
a{3}Совпадает с "aaa"
{n,}
-
Совпадение не менее n раз
-
Пример:
a{2,}Совпадает с "aa", "aaa" и т. д.
{n,m}
-
Совпадение от n до m раз
-
Пример:
a{2,4}Совпадает с "aa", "aaa", "aaaa"
Метасимволы группировки и чередования
()(круглые скобки)
-
Определяет подвыражение или группу захвата
-
Пример:
(ab)+Совпадает с "ab", "abab" и т. д.
|(вертикальная черта)
-
Представляет отношение "или"
-
Пример:
cat|dogСовпадает с "cat" или "dog"
Метасимволы специальных классов символов
\d
-
Совпадает с любой цифрой, эквивалентно
[0-9]
\D
-
Совпадает с любым нецифровым символом, эквивалентно
[^0-9]
\w
-
Совпадает с любым словесным символом (буквой, цифрой, подчёркиванием), эквивалентно
[a-zA-Z0-9_]
\W
-
Совпадает с любым несловесным символом, эквивалентно
[^a-zA-Z0-9_]
\s
-
Совпадает с любым символом пробела (пробел, табуляция, новая строка и т. д.)
\S
-
Совпадает с любым непробельным символом
Метасимволы сопоставления границ
\b
-
Совпадает с границей слова
-
Пример:
\bcat\bСовпадает с "cat", но не с "category"
\B
-
Совпадает с не-границей слова
-
Пример:
\Bcat\BСовпадает с "cat" в "scattered", но не с отдельным "cat"
Другие метасимволы
\n
-
Совпадает с переводом строки
\t
-
Совпадает с табуляцией
\r
-
Совпадает с возвратом каретки
\f
-
Совпадает с переводом страницы
\v
-
Совпадает с вертикальной табуляцией
Жадные и нежадные квантификаторы
По умолчанию квантификаторы (*, +, ?, {}) являются жадными, совпадая с как можно большим количеством символов. Добавьте после квантификатора?чтобы перевести его в нежадный (ленивый) режим:
-
*?: ноль или более, но как можно меньше -
+?: один или более, но как можно меньше -
??: ноль или один, но как можно меньше -
{n,m}?: от n до m раз, но как можно меньше
Пример:<.*?>При сопоставлении HTML-тегов он не сопоставляется между тегами
Позитивный и негативный просмотр вперёд
(?=...)(позитивный просмотр вперёд)
-
Совпадает с позицией, за которой следует определённый шаблон
-
Пример:
Windows(?=95|98)Совпадает с "Windows", за которым следует 95 или 98
(?!...)(негативный просмотр вперёд)
-
Совпадает с позицией, за которой не следует определённый шаблон
-
Пример:
Windows(?!95|98)Совпадает с "Windows", за которым не следует 95 или 98
(?<=...)(позитивный просмотр назад)
-
Совпадает с позицией, перед которой стоит определённый шаблон
-
Пример:
(?<=95|98)WindowsСовпадает с "Windows", перед которым стоит 95 или 98
(?<!...)(отрицательный просмотр назад)
-
Совпадает с позицией, перед которой не стоит определённый шаблон
-
Пример:
(?<!95|98)WindowsСовпадает с "Windows", перед которым не стоит 95 или 98
Примеры
Далее давайте разберём регулярное выражение для сопоставления адресов электронной почты, как показано ниже:
Примеры
Текст, отмеченный ниже, — это выражение с полученными совпадениями:
Попробуйте »

Следующая таблица содержит полный список метасимволов и их поведение в контексте регулярных выражений:
| Символ | Описание |
|---|---|
| \ | Обозначает следующий символ как специальный символ, литеральный символ, обратную ссылку или восьмеричную escape-последовательность. Например, 'n' соответствует символу "n". '\n' соответствует новой строке. Последовательность '\\' соответствует "\" и '\("' соответствует "(". |
| ^ | Совпадает с началом входной строки. Если свойство Multiline объекта RegExp установлено, ^ также совпадает с позициями после '\n' или '\r'. |
| $ | Совпадает с концом входной строки. Если свойство Multiline объекта RegExp установлено, $ также совпадает с позициями перед '\n' или '\r'. |
| * | Совпадает с предшествующим подвыражением ноль или более раз. Например, zo* может совпадать с "z", а также с "zoo". * эквивалентно {0,}. |
| + | Совпадает с предшествующим подвыражением один или более раз. Например, 'zo+' может совпадать с "zo", а также с "zoo", но не может совпадать с "z". + эквивалентно {1,}. |
| ? | Совпадает с предшествующим подвыражением ноль или один раз. Например, "do(es)?" может совпадать с "do" или "does". ? эквивалентно {0,1}. |
| {n} | n — неотрицательное целое число. Совпадает ровно n раз. Например, 'o{2}' не может совпадать с 'o' в "Bob", но может совпадать с двумя o в "food". |
| {n,} | n — неотрицательное целое число. Совпадает как минимум n раз. Например, 'o{2,}' не может совпадать с 'o' в "Bob", но может совпадать со всеми o в "foooood". 'o{1,}' эквивалентно 'o+'. 'o{0,}' эквивалентно 'o*'. |
| {n,m} | m и n — оба неотрицательные целые числа, где n <= m. Совпадает как минимум n раз и не более m раз. Например, "o{1,3}" совпадёт с первыми тремя o в "fooooood". 'o{0,1}' эквивалентно 'o?'. Обратите внимание, что между запятой и двумя числами не должно быть пробелов. |
| ? | Когда этот символ непосредственно следует за любым другим квантификатором (*, +, ?, {n}, {n,}, {n,m}), режим сопоставления является нежадным. Нежадный режим сопоставляет как можно меньшую часть искомой строки, тогда как жадный режим по умолчанию сопоставляет как можно большую. Например, для строки "oooo", 'o+?' совпадёт с одним "o", тогда как 'o+' совпадёт со всеми 'o'. |
| . | Совпадает с любым отдельным символом, кроме перевода строки (\n, \r). Чтобы совпадать с любым символом, включая '\n', используйте шаблон вида"(.|\n)". |
| (pattern) | Сопоставить шаблон и получить это совпадение. Полученное совпадение можно извлечь из результирующей коллекции Matches, используя коллекцию SubMatches в VBScript и свойства $0…$9 в JScript. Чтобы сопоставить символы круглых скобок, используйте '\\(' или '\\)'. |
| (?:pattern) | Сопоставляется с шаблоном, но не захватывает результат совпадения, то есть это незахватывающее совпадение, не сохраняемое для последующего использования. Это полезно при использовании символа "или" (|) для объединения частей шаблона. Например, 'industr(?:y|ies)' — более краткое выражение, чем 'industry|industries'. |
| (?=pattern) | Утверждение положительного просмотра вперёд. Сопоставляется с искомой строкой в начале любой строки, которая соответствует шаблону. Это незахватывающее совпадение, то есть совпадение не нужно захватывать для последующего использования. Например, "Windows(?=95|98|NT|2000)" сопоставляется с "Windows" в "Windows2000", но не может сопоставиться с "Windows" в "Windows3.1". Просмотр вперёд не потребляет символы, то есть после возникновения совпадения поиск следующего совпадения начинается сразу после последнего совпадения, а не после символов, включённых в просмотр вперёд. |
| (?!pattern) | Утверждение отрицательного просмотра вперёд. Сопоставляется с искомой строкой в начале любой строки, которая не соответствует шаблону. Это незахватывающее совпадение, то есть совпадение не нужно захватывать для последующего использования. Например, "Windows(?!95|98|NT|2000)" сопоставляется с "Windows" в "Windows3.1", но не может сопоставиться с "Windows" в "Windows2000". Просмотр вперёд не потребляет символы, то есть после возникновения совпадения поиск следующего совпадения начинается сразу после последнего совпадения, а не после символов, включённых в просмотр вперёд. |
| (?<=pattern) | Утверждение положительного просмотра назад, аналогично утверждению положительного просмотра вперёд, но направление противоположное. Например, "(?<=95|98|NT|2000)Windows"может сопоставиться с"2000Windows"in"Windows", но не может сопоставиться с"3.1Windows"in"Windows"。 |
| (?<!pattern) | Утверждение отрицательного просмотра назад, аналогично утверждению отрицательного просмотра вперёд, но направление противоположное. Например(?<!95|98|NT|2000)Windows"может сопоставиться с"3.1Windows"in"Windows", но не может сопоставиться с"2000Windows"in"Windows"。 |
| x|y | Сопоставляется с x или y. Например, 'z|food' может сопоставиться с "z" или "food". '(z|f)ood' сопоставляется с "zood" или "food". |
| [xyz] | Набор символов. Соответствует любому одному из включённых символов. Например, '[abc]' может соответствовать 'a' в "plain". |
| [^xyz] | Отрицательный набор символов. Соответствует любому символу, который не включён. Например, '[^abc]' может соответствовать 'p', 'l', 'i', 'n' в "plain". |
| [a-z] | Диапазон символов. Соответствует любому символу в указанном диапазоне. Например, '[a-z]' может соответствовать любому символу строчной буквы в диапазоне от 'a' до 'z'. |
| [^a-z] | Отрицательный диапазон символов. Соответствует любому символу, не входящему в указанный диапазон. Например, '[^a-z]' соответствует любому символу не в диапазоне от 'a' до 'z'. |
| \b | Соответствует границе слова, то есть позиции между словом и пробелом. Например, 'er\b' может соответствовать 'er' в "never", но не может соответствовать 'er' в "verb". |
| \B | Соответствует не границе слова. 'er\B' может соответствовать 'er' в "verb", но не может соответствовать 'er' в "never". |
| \cx | Соответствует управляющему символу, обозначенному x. Например, \cM соответствует Control-M или возврату каретки. Значение x должно быть одним из A-Z или a-z. В противном случае рассматривайте c как литеральный символ 'c'. |
| \d | Совпадает с цифровым символом. Эквивалентно [0-9]. |
| \D | Совпадает с нецифровым символом. Эквивалентно [^0-9]. |
| \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. |
| \w | Соответствует буквам, цифрам, знакам подчеркивания. Эквивалентно '[A-Za-z0-9_]'. |
| \W | Соответствует любому символу, кроме букв, цифр и знаков подчеркивания. Эквивалентно '[^A-Za-z0-9_]'. |
| \xn | Соответствует n, где n — шестнадцатеричное escape-значение. Шестнадцатеричное escape-значение должно состоять ровно из двух цифр. Например, '\x41' соответствует "A". '\x041' эквивалентно '\x04' & "1". В регулярных выражениях можно использовать кодировку ASCII. |
| \num | Соответствует num, где num — положительное целое число. Обратная ссылка на захваченное совпадение. Например, '(.)\1' соответствует двум последовательным одинаковым символам. |
| \n | Определяет восьмеричное escape-значение или обратную ссылку. Если перед \n есть как минимум n захваченных подвыражений, то n — обратная ссылка. В противном случае, если n — восьмеричная цифра (0-7), то n — восьмеричное escape-значение. |
| \nm | Определяет восьмеричное escape-значение или обратную ссылку. Если перед \nm есть как минимум nm захваченных подвыражений, то nm — обратная ссылка. Если перед \nm есть как минимум n захваченных групп, то n — обратная ссылка, за которой следует литерал m. Если ни одно из предыдущих условий не выполнено и n и m — обе восьмеричные цифры (0-7), то \nm соответствует восьмеричному escape-значению nm. |
| \nml | Если n — восьмеричная цифра (0-3), а m и l — обе восьмеричные цифры (0-7), то сопоставить восьмеричное escape-значение nml. |
| \un | Соответствует n, где n — символ Юникода, представленный четырьмя шестнадцатеричными цифрами. Например, \u00A9 соответствует символу авторского права (?). |
