Шпаргалка по регулярным выражениям — Exlab

Шпаргалка представляет собой общее руководство по шаблонам регулярных выражений без учета специфики какого-либо языка. Она представлена в виде таблицы, помещающейся на одном печатном листе формата A4. Создана под лицензией Creative Commons на базе шпаргалки, автором которой является Dave Child (подробнее).

  • Скачать в PDF     ~96 кб
  • Скачать в PNG     ~81 кб

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

Якоря

Якоря в регулярных выражениях указывают на начало или конец чего-либо.

обозначает начало строки. Без него шаблон соответствовал бы любой строке, содержащей цифру.

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

Символьные классы в регулярных выражениях соответствуют сразу некоторому набору символов. Например, \d соответствует любой цифре от 0 до 9 включительно, \w соответствует буквам и цифрам, а \W — всем символам, кроме букв и цифр. Шаблон, идентифицирующий буквы, цифры и пробел, выглядит так:

\w\s

POSIX

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

Утверждения

Поначалу практически у всех возникают трудности с пониманием утверждений, однако познакомившись с ними ближе, вы будете использовать их довольно часто. Утверждения предоставляют способ сказать: «я хочу найти в этом документе каждое слово, включающее букву “q”, за которой не следует “werty”». \s]*).

Образцы шаблонов

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

Кванторы

Кванторы позволяют определить часть шаблона, которая должна повторяться несколько раз подряд. Например, если вы хотите выяснить, содержит ли документ строку из от 10 до 20 (включительно) букв «a», то можно использовать этот шаблон:

a{10,20}

По умолчанию кванторы — «жадные». Поэтому квантор +, означающий «один или больше раз», будет соответствовать максимально возможному значению. Иногда это вызывает проблемы, и тогда вы можете сказать квантору перестать быть жадным (стать «ленивым»), используя специальный модификатор.

Посмотрите на этот код:

".*"

Этот шаблон соответствует тексту, заключенному в двойные кавычки. Однако, ваша исходная строка может быть вроде этой:

<a href="helloworld.htm" title="Привет, Мир">Привет, Мир</a>

Приведенный выше шаблон найдет в этой строке вот такую подстроку:

"helloworld.htm" title="Привет, Мир"

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

".*?"

Этот шаблон также соответствует любым символам, заключенным в двойные кавычки. Но ленивая версия (обратите внимание на модификатор

?) ищет наименьшее из возможных вхождений, и поэтому найдет каждую подстроку в двойных кавычках по отдельности:

"helloworld.htm"
"Привет, Мир"

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

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

.» в качестве шаблона — это приведет к нахождению практически всего. Итак, вам необходимо сообщить парсеру, что эта точка должна считаться обычной точкой, а не «любым символом». Это делается с помощью знака экранирования.

Знак экранирования, предшествующий символу вроде точки, заставляет парсер игнорировать его функцию и считать обычным символом. Есть несколько символов, требующих такого экранирования в большинстве шаблонов и языков. Вы можете найти их в правом нижнем углу шпаргалки («Мета-символы»).

Шаблон для нахождения точки таков:

\.

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

A-Fa-f0-9]

Группы наиболее часто применяются, когда в шаблоне необходимо условие «или»; когда нужно сослаться на часть шаблона из другой его части; а также при подстановке строк.

Использовать «или» очень просто: следующий шаблон ищет «ab» или «bc»:

(ab|bc)

Если в регулярном выражении необходимо сослаться на какую-то из предшествующих групп, следует использовать \n, где вместо n подставить номер нужной группы. Вам может понадобиться шаблон, соответствующий буквам «aaa» или «bbb», за которыми следует число, а затем те же три буквы. Такой шаблон реализуется с помощью групп:

(aaa|bbb)[0-9]+\1

Первая часть шаблона ищет «aaa» или «bbb», объединяя найденные буквы в группу. За этим следует поиск одной или более цифр ([0-9]+), и наконец \1. Последняя часть шаблона ссылается на первую группу и ищет то же самое. Она ищет совпадение с текстом, уже найденным первой частью шаблона, а не соответствующее ему.

A-Za-z0-9])

Он найдет любые вхождения слова «wish» вместе с предыдущим и следующим символами, если только это не буквы или цифры. Тогда ваша подстановка может быть такой:

$1<b>$2</b>$3

Ею будет заменена вся найденная по шаблону строка. Мы начинаем замену с первого найденного символа (который не буква и не цифра), отмечая его $1. Без этого мы бы просто удалили этот символ из текста. То же касается конца подстановки (

$3). В середину мы добавили HTML тег для жирного начертания (разумеется, вместо него вы можете использовать CSS или <strong>), выделив им вторую группу, найденную по шаблону ($2).

Модификаторы шаблонов

Модификаторы шаблонов используются в нескольких языках, в частности, в Perl. Они позволяют изменить работу парсера. Например, модификатор i заставляет парсер игнорировать регистры.

Регулярные выражения в Perl обрамляются одним и тем же символом в начале и в конце. Это может быть любой символ (чаще используется «/»), и выглядит все таким образом:

/pattern/

Модификаторы добавляются в конец этой строки, вот так:

/pattern/i

Мета-символы

Наконец, последняя часть таблицы содержит мета-символы. Это символы, имеющие специальное значение в регулярных выражениях. Так что если вы хотите использовать один из них как обычный символ, то его необходимо экранировать. Для проверки наличия скобки в тексте, используется такой шаблон:

\(

  • Шпаргалка по mod_rewrite
  • Шпаргалка по CSS

эффективные шаблоны и символы в смс

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

]

Символы скобок () [] и {} по одиночке интерпретируются как литеральные, а в группе в правильной последовательности как метасимволы.

Метасимволы

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

а) . точка

Символ точки заменяет любой символ. Чтобы искать точку, как литеральный символ, используете экранирование «\.».

б) Символьные классы [: :]

описывают диапазоны и не зависят от конкретного языка

Класс

[:upper:]

[:lower:]

[:alpha:]

[:digit:]

[:xdigit:]

[:alnum:]

[:punct:]

[:blank:]

[:space:]

[:cntrl:]

[:graph:]

[:print:]

Эквивалент

[A-Z] или [А-Я]

[a-z] или [а-я]

[[:upper:][:lower:]]

[0-9]

[[:digit:]A-Fa-f]

[[:alpha:][:digit:]]

[-!»#$%&'()*+,./:;?@[\\\]_`{|}~]

[[:graph:] ]

Значение

Символы верхнего регистра

Символы нижнего регистра

Буквенные символы

Цифровые символы

Шестнадцатеричные

Буквы и цифры

Знаки пунктуации

Пробел и табуляция

Пробел, табуляция, перенос строки, перевод каретки, разрыв страницы и др.

Управляющие символы

Печатные символы

Печатные символы и пробелы

Использование класса возможно лишь внутри квадратных скобок, т.к. сочетания [: :] определяют сам класс. Вторая пара квадратных скобок используется для обозначения интервала, в который входит данный класс символов, например, [[:alpha:]]

в) Упорядочивающие классы [. .]

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

г) Классы эквивалентных символов [= =]

Для языков, в алфавитах которых используются похожие символы при необходимости можно воспользоваться классом эквивалентных символов [= =].

Например, в испанском языке [[=n=]] будет соответствовать как N, так и ñ в слове El Niño. В немецком языке можно задавать правила для букв с умлаутами: [[=ö=]]. стоит не сразу после скобки, он будет интерпретирован как литеральный, а не как отрицание

е) Квантификаторы и операторы повтора предшествующего символа или группы символов

Квантификатор

*

?

+

{m}

{m,}

{m,n}

Встречается

0 или более раз

0 или 1 раз

1 или более раз

точно m раз

как минимум m раз

от m до n раз

Описание

ab*c соответствует ac, abc, и abbc, но не соответствует abb

ab?c соответствует abc и ac, но не соответствует abbc

a+ соответствует a, aa и aaa, но не соответствует bbb

a{2} соответствует aa, но не a

a{3, } соответствует aaa или aaaa, но не соответствует aa

a {3,5} соответствует aaa и aaaaa, но не aa

Особенность системы приводит к тому, что по выражению a{3} или a{3,5} строка aaaaaa также будет считаться подходящей, поэтому могут потребоваться дополнительные правила. 12345$ будет соответствовать только строке 12345.

Возможности использования в системе

Система цензуры

В системе существует ограничение на отправку сообщений с определенным текстом, для этого используется система цензуры. Конституция Российской Федерации, гарантируя свободу мысли и слова, запрещает пропаганду или агитацию, возбуждающие социальную, расовую, национальную или религиозную ненависть и вражду, пропаганду социального, расового, национального, религиозного или языкового превосходства (статья 29). Для предотвращения подобных случаев, а также использования нецензурных выражений, используется глобальный фильтр, который распространяется на всех пользователей.

Фильтр «Запрещенные слова»

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

Обработка входящих сообщений

Система позволяет организовать гибкую и настраиваемую систему обработки входящих сообщений. Для этого также используются регулярные выражения. Для входящих сообщений можно настроить следующие действия:

  • § оправка на электронную почту
  • § переадресация на другой номер
  • § передача по HTTP
  • § ответ в SMS

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

Примеры составления регулярных выражений

Пример 1

Проверить наличие в тексте даты и месяца :

[[:digit:]]{1,2}[[:space:]]+марта

при помощи данного выражения мы ищем:

[[:digit:]]{1,2}

[[:space:]]+

марта

одна или две цифры, соответствующие числу, для однозначных и двузначных чисел

один или несколько пробелов между днем и названием месяца

строка литеральных символов

Пример 2

Регулярные выражения очень удобны для нахождения слов в разных падежах и числах. |[[:space:]])

[еия]

чтобы слово было найдено, написано ли оно в начале строки или после пробела

в квадратных скобках указываем варианты падежных окончаний.

Получить коммерческое предложение

Оставьте свои контактные данные. С вами свяжется наш менеджер и подробно расскажет о стоимости и возможностях СМС рассылки.

Нажимая на кнопку, вы даете согласие на обработку своих персональных данных

Выбирайте лучшее

Язык регулярных выражений — краткий справочник

  • Статья

Регулярное выражение — это шаблон, которому механизм регулярных выражений пытается сопоставить входной текст. Шаблон состоит из одного или нескольких символьных литералов, операторов или конструкций. Краткое введение см. в разделе Регулярные выражения .NET.

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

Мы также предоставили эту информацию в двух форматах, которые вы можете скачать и распечатать для удобства:

  • Скачать в формате Word (.docx)
  • Скачать в формате PDF (.pdf)

Экранирование символов

Символ обратной косой черты (\) в регулярном выражении указывает, что символ, следующий за ним, либо является специальным символом (как показано в следующей таблице), либо должен интерпретироваться буквально. Дополнительные сведения см. в разделе Экранирование символов.

Экранированный символ Описание Узор Совпадения
Соответствует символу колокольчика, \u0007. \ "\u0007" в "Ошибка!" + '\ u0007'
В классе символов соответствует символу возврата, \u0008. [\b]{3,} "\b\b\b\b" в "\b\b\b\b"
\ т Соответствует вкладке, \u0009. (\w+)\t "item1\t" , "item2\t" в "item1\titem2\t"
Соответствует возврату каретки, \u000D. ( \r не эквивалентен символу новой строки, \n .) \r\n(\w+) "\r\nЭти" в "\r\nЭто\nдве строки."
\v Соответствует вертикальной вкладке, \u000B. [\v]{2,} "\v\v\v" в "\v\v\v"
Соответствует переводу страницы, \u000C. [\f]{2,} "\f\f\f" в "\f\f\f"
\n Соответствует новой строке, \u000A. \r\n(\w+) "\r\nЭти" в "\r\nЭти\nдве строки."
Соответствует побегу, \u001B. "\x001B" в "\x001B"
\ ннн Использует восьмеричное представление для указания символа ( nnn состоит из двух или трех цифр). \ш\040\ш "a b" , "c d" в "a bc d"
\x нн Использует шестнадцатеричное представление для указания символа ( nn состоит ровно из двух цифр). \ш\х20\ш "a b" , "c d" в "a bc d"
\c X

\c x

Совпадает с управляющим символом ASCII, который указан как X или x , где X или x — это буква управляющего символа. \кС "\x0003" в "\x0003" (Ctrl-C)
нннн Соответствует символу Unicode, используя шестнадцатеричное представление (ровно четыре цифры, представленные nnnn ). \w\u0020\w "a b" , "c d" в "a bc d"
\ Если за ним следует символ, который не распознается как escape-символ в этой и других таблицах этого раздела, соответствует этому символу. Например, \* совпадает с \x2A и \. совпадает с \x2E . Это позволяет обработчику регулярных выражений устранять неоднозначность языковых элементов (таких как * или ?) и символьных литералов (представленных \* или \? ). \d+[\+-x\*]\d+ "2+2" и "3*9" в "(2+2) * 3*9"

Классы символов

Класс символов соответствует любому из набора символов. Классы символов включают языковые элементы, перечисленные в следующей таблице. Дополнительные сведения см. в разделе Классы символов.

9ай]
Класс символов Описание "р" , "г" , "н" в "царствование"
[ первый - последний ] Диапазон символов: соответствует любому одиночному символу в диапазоне от первых до последних . [А-Я] "А" , "В" в "AB123"
. Подстановочный знак: соответствует любому одиночному символу, кроме \n .

Чтобы совпасть с буквальным символом точки (. или \u002E ), вы должны предварить его escape-символом ( \. ).

до "авеню" в "ступицу"

"ели" в "воду"

\p{ имя } Соответствует любому одиночному символу в общей категории Unicode или именованному блоку, указанному в имя . \p{Lu}

\p{IsCyrillic}

"C" , "L" в "City Lights"

"Д" , "Ж" в "ДЖем"

90 046
\P{ имя } Соответствует любому одиночному символу, не входящему в общую категорию Unicode или именованный блок, заданный name . \P{Лу}

\P{IsCyrillic}

"и" , "т" , "у" в "Город"

"е" , "м" в "ДЖем"

Соответствует любому символу слова. "I" , "D" , "A" , "1" , "3" в "ID A1.3"
Соответствует любому символу, не являющемуся словом. \Вт "" , "." в "ID A1.3"
Соответствует любому символу пробела. \w\s "D" в "ID A1.3"
Соответствует любому символу, отличному от пробела. \с\с "_" в "int __ctr"
Соответствует любой десятичной цифре. "4" в "4 = IV"
Соответствует любому символу, кроме десятичной цифры. \D "" , "=" , "" , "I" , "V" в "4 = IV"

Якоря

Якоря, или атомарные утверждения нулевой ширины, приводят к успешному или неудачному совпадению в зависимости от текущей позиции в строке, но они не заставляют движок продвигаться по строке или потреблять символы. 9\д{3} "901" в "901-333-" $ По умолчанию совпадение должно находиться в конце строки или перед \n в конце строки; в многострочном режиме он должен располагаться до конца строки или до \n в конце строки. -\d{3}$ "-333" в "-901-333" Совпадение должно происходить в начале строки. \А\д{3} "901" в "901-333-" \Z Совпадение должно находиться в конце строки или перед \n в конце строки. -\d{3}\Z "-333" в "-901-333" Совпадение должно находиться в конце строки. -\d{3}\z "-333" в "-901-333" Совпадение должно произойти в точке, где закончилось предыдущее совпадение, или, если предыдущего совпадения не было, в позиции в строке, где началось сопоставление. \Г\(\д\) "(1)" , "(3)" , "(5)" в "(1)(3)(5)[7](9)" Совпадение должно происходить на границе между \w (буквенно-цифровой) и \W (не буквенно-цифровой). \b\w+\s\w+\b "тема их" , "тема их" в "тема их их" Совпадение не должно происходить на границе \b . \Изгиб\w*\b "концы" , "край" в "конец посылает терпеть кредитору"

Конструкции группировки

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

Группирующая конструкция Описание Узор Совпадения
( подвыражение ) Захватывает совпавшее подвыражение и присваивает ему порядковый номер, отсчитываемый от единицы. (\ш)\1 "ее" в "глубокий"
(?< имя > подвыражение )
или
(?' 9019 6 имя ' подвыражение )
Захватывает совпавшее подвыражение в именованную группу. (?<двойной>\w)\k<двойной> "ее" в "глубокий"
(?< имя1 - имя2 > подвыражение ) 9091 8 или
(?' имя1 - имя2 ' подвыражение 9((1-3)*(3-1))"
(?: подвыражение ) Определяет незахватываемую группу. Запись(?:Строка)? "WriteLine" в "Console.WriteLine()"

"Write" в "Console.Write(значение)"

(?imnsx-imnsx: подвыражение ) Применяет или отключает указанные параметры в течение подвыражение . Дополнительные сведения см. в разделе Параметры регулярных выражений. А\d{2}(?i:\w+)\b "A12xl" , "A12XL" в "A12xl A12XL a12xl"
(?= подвыражение ) Утверждение положительного просмотра вперед нулевой ширины. \b\w+\b(?=.+и.+) "кошки" , "собаки"
в
"кошки, собаки и некоторые мыши".
(?! подвыражение ) Утверждение отрицательного просмотра вперед нулевой ширины. \b\w+\b(?!.+и.+) "и" , "некоторые" , "мыши"
в
"кошки, собаки и некоторые мыши".
(?<= подвыражение ) Утверждение положительного ретроспективного просмотра нулевой ширины. \b\w+\b(?<=.+и.+)

———————————

\b\w+\b(?<=.+и.*)

"некоторые" , "мыши"
в
"кошки, собаки и некоторые мыши".
————————————
«и» , «некоторые» , «мыши»
в
«кошки, собаки и некоторые мыши».
(? подвыражение ) Отрицательное утверждение ретроспективного просмотра нулевой ширины. \b\w+\b(?

———————————

\b\w+\b(? +и.*)

"кошки" , "собаки" , "и"
в
"кошки, собаки и некоторые мыши".
————————————
«кошки» , «собаки»
в
«кошки, собаки и некоторые мыши».
(?> подвыражение ) Атомная группа. (?>а|аб)с "ac" в "ac"

ничего в "abc"

Обзоры с первого взгляда

Когда обработчик регулярных выражений встречает выражение просмотра , он берет подстроку, идущую от текущей позиции до начала (просмотр назад) или конца (просмотр вперед) исходной строки, а затем выполняет Regex.IsMatch для этой подстроки, используя шаблон поиска. Затем успешность результата этого подвыражения определяется тем, является ли это утверждение положительным или отрицательным.

Осмотр Имя Функция
(?=проверить) Положительный прогноз Утверждает, что то, что следует сразу за текущей позицией в строке, является «проверкой».
(?<=проверить) Положительный просмотр назад Утверждает, что то, что непосредственно предшествует текущей позиции в строке, является «проверкой».
(?!проверить) Отрицательный прогноз Утверждает, что то, что следует сразу за текущей позицией в строке, не является «проверкой».
(? Отрицательный ретроспективный просмотр Утверждает, что то, что непосредственно предшествует текущей позиции в строке, не является «проверкой».

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

Квантификаторы

Квантификатор указывает, сколько экземпляров предыдущего элемента (который может быть символом, группой или классом символов) должно присутствовать во входной строке, чтобы произошло совпадение. Квантификаторы включают языковые элементы, перечисленные в следующей таблице. Для получения дополнительной информации см. Квантификаторы.

Квантификатор Описание Узор Совпадения
* Соответствует предыдущему элементу ноль или более раз. а.*к "abcbc" в "abcbc"
+ Соответствует предыдущему элементу один или несколько раз. "быть+" "пчела" в "был" , "быть" в "согнутый"
? Соответствует предыдущему элементу ноль или один раз. "рай?" "рай" в "дождь"
{ п } Соответствует предыдущему элементу ровно n раз. ",\d{3}" ",043" в "1,043,6" , ",876" , ",543" и ",210" в "9,876,5 43 210 дюймов
{ п ,} Соответствует предыдущему элементу не менее n раз. "\d{2,}" "166" , "29" , "1930"
{ n , м } Соответствует предыдущему элементу не менее n раз, но не более m раз. "\d{3,5}" "166" , "17668"

"19302" в "193024"

*? Соответствует предыдущему элементу ноль или более раз, но как можно меньше раз. а.*?с "abc" в "abcbc"
+? Соответствует предыдущему элементу один или несколько раз, но как можно меньше раз. "быть+?" "быть" в "было" , "было" в "согнуто"
?? Соответствует предыдущему элементу ноль или один раз, но как можно меньше раз. "рай??" "ра" в "дождь"
{ п }? Соответствует предыдущему элементу ровно n раз. ",\d{3}?" ",043" в "1,043,6" , ",876" , ",543" и ",210" в "9,876,54 3210 дюймов
{ п ,}? Соответствует предыдущему элементу как минимум n раз, но как можно меньше раз. "\d{2,}?" "166" , "29" , "1930"
{ п , м }? Соответствует предыдущему элементу между n и m раз, но как можно меньше раз. "\d{3,5}?" "166" , "17668"

"193" , "024" в "193024"

Конструкции обратной ссылки

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

Конструкция обратной ссылки Описание Узор Совпадения
\ номер Обратная ссылка. Соответствует значению нумерованного подвыражения. (\ш)\1 "ее" в "искать"
\k< имя > Именованная обратная ссылка. Соответствует значению именованного выражения. (?\w)\k "ее" в "искать"

Конструкции с чередованием

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

Альтернативная конструкция Описание Образец Совпадения
| Соответствует любому элементу, разделенному вертикальной чертой ( | ). й(е|ис|ат) "это" , "это" в "это день".
(?( выражение ) да | нет )
или 9 0918 (?( выражение ) да )
Соответствует да , если шаблон регулярного выражения, обозначенный выражением , соответствует; в противном случае соответствует дополнительной детали . выражение интерпретируется как утверждение нулевой ширины.

Чтобы избежать двусмысленности с именованной или пронумерованной группой захвата, вы можете дополнительно использовать явное утверждение, например:
(?( (?= выражение )) да | нет )

(?(А)А\d{2}\b|\b\d{3}\b) "А10" , "910" в "А10 С103 910"
(?( наименование ) да | нет )
или 9 0918 (?( имя ) да )
Совпадения да , если name , именованная или пронумерованная группа захвата, имеет совпадение; в противном случае соответствует необязательному no . (?")?(?(quoted).+?"|\S+\s) "Собаки.jpg" , "\"Йиска играет.jpg\"" в "Собаки.jpg \"Йиска играет.jpg\""

Замены

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

Символ Описание Узор Шаблон для замены Строка ввода Строка результата
$ номер Заменяет подстроку, совпадающую с группой , на число . \b(\w+)(\s)(\w+)\b $3 $2 $1 "раз два" "два один"
${ имя } Заменяет подстроку, соответствующую именованной группе name . \b(?\w+)(\s)(?\w+)\b ${слово2} ${слово1} "раз два" "два один"
$$ Заменяет литерал "$". \b(\d+)\s?USD $$$1 "103 доллара США" "103 доллара"
$& Заменяет копию всего совпадения. \$?\d*\.?\d+ **$&** "1,30 доллара" "**1,30$**"
$` Заменяет весь текст входной строки до совпадения. Б+ $` "AABBCC" "ААААКК"
$' Заменяет весь текст входной строки после совпадения. Б+ $' "AABBCC" "ААККЦ"
$+ Заменяет последнюю захваченную группу. Б+(К+) $+ "AABBCCDD" "ААККДД"
$_ Заменяет всю входную строку. Б+ $_ "AABBCC" "AAAABBCCCC"

Параметры регулярных выражений

Можно указать параметры, управляющие тем, как обработчик регулярных выражений интерпретирует шаблон регулярного выражения. Многие из этих параметров могут быть указаны либо встроенными (в шаблоне регулярного выражения), либо как одна или несколько констант RegexOptions. В этом кратком справочнике перечислены только встроенные параметры. Дополнительные сведения о встроенных параметрах и параметрах RegexOptions см. в статье Параметры регулярных выражений.

Вы можете указать встроенный параметр двумя способами:

  • С помощью другой конструкции (?imnsx-imnsx) , где знак минус (-) перед параметром или набором параметров отключает эти параметры. Например, (?i-mn) включает сопоставление без учета регистра ( i ), выключает многострочный режим ( m ) и выключает захват безымянных групп ( n ). Параметр применяется к шаблону регулярного выражения, начиная с точки, в которой он определен, и действует либо до конца шаблона, либо до точки, где другая конструкция обращает параметр.
  • С помощью конструкции группировки (?imnsx-imnsx: подвыражение ) , которая определяет параметры только для указанной группы.

Механизм регулярных выражений .NET поддерживает следующие встроенные параметры:

Параметр Описание Узор Совпадения
и Использовать сопоставление без учета регистра. \b(?i)a(?-i)a\w+\b 9 и $ соответствуют началу и концу строки, а не началу и концу строки. Пример см. в разделе «Многострочный режим» раздела «Параметры регулярных выражений».
нет Не захватывать безымянные группы. Пример см. в разделе «Только явные захваты» в параметрах регулярных выражений.
с Использовать однострочный режим. Пример см. в разделе «Однострочный режим» в разделе «Параметры регулярных выражений».
х Игнорировать неэкранированные пробелы в шаблоне регулярного выражения. \b(?x) \d+ \s \w+ "1 трубкозуб" , "2 кошки" в "1 трубкозуб 2 кошки IV центурионы"

Разные конструкции

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

Конструкция Определение Пример
(?imnsx-imnsx) Устанавливает или отключает такие параметры, как нечувствительность к регистру в середине шаблона. Дополнительные сведения см. в разделе Параметры регулярных выражений. \bA(?i)b\w+\b соответствует "ABA" , "Able" в "ABA Able Act"
(?# комментарий ) Встроенный комментарий. Комментарий заканчивается первой закрывающей скобкой. \bA(?# Соответствует словам, начинающимся с буквы A)\w+\b
# [до конца строки] Комментарий X-режима. Комментарий начинается с неэкранированного # и продолжается до конца строки. (?x)\bA\w+\b# Соответствует словам, начинающимся с буквы A

См.

также
  • System.Text.RegularExpressions
  • System.Text.RegularExpressions.Regex
  • Регулярные выражения
  • Классы регулярных выражений
  • Регулярные выражения — краткий справочник (скачать в формате Word)
  • Регулярные выражения — краткий справочник (скачать в формате PDF)

Как писать регулярные выражения?

Регулярное выражение (регулярное выражение) — это последовательность символов, определяющая шаблон поиска. Вот как писать регулярные выражения:

  1. Начните с понимания специальных символов, используемых в регулярных выражениях, таких как «.», «*», «+», «?» и других.
  2. Выберите язык программирования или инструмент, поддерживающий регулярные выражения, например Python, Perl или grep.
  3. Напишите шаблон, используя специальные символы и буквенные символы.
  4. Используйте соответствующую функцию или метод для поиска шаблона в строке.
Примеры:
  1. Чтобы сопоставить последовательность буквенных символов, просто впишите эти символы в шаблон.
  2. Чтобы найти один символ из набора возможных, используйте квадратные скобки, например. [0123456789] соответствует любой цифре.
  3. Чтобы найти ноль или более вхождений предыдущего выражения, используйте символ звездочки (*).
  4. Чтобы сопоставить одно или несколько вхождений предыдущего выражения, используйте символ плюс (+).
  5. Важно отметить, что регулярные выражения могут быть сложными и трудными для чтения, поэтому для отладки и оптимизации шаблонов рекомендуется использовать такие инструменты, как тестеры регулярных выражений.

Регулярное выражение (иногда называемое рациональным выражением) — это последовательность символов, определяющая шаблон поиска, в основном для использования при сопоставлении шаблонов со строками или сопоставлении строк, т. е. в операциях типа «найти и заменить». Регулярные выражения — это обобщенный способ сопоставления шаблонов с последовательностями символов. Он используется во всех языках программирования, таких как C++, Java и Python. 9([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$

Приведенное выше регулярное выражение можно использовать для проверки того, является ли данный набор символов адресом электронной почты или нет.

Существуют определенные элементы, используемые для написания регулярных выражений, как указано ниже:

1. Повторители (  *, + и { } )  

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

2. Символ звездочки (*)

Он сообщает компьютеру, что предыдущий символ (или набор символов) должен соответствовать 0 или более раз (вплоть до бесконечности).

  Пример:  Регулярное выражение ab*c даст ac, abc, abbc, abbbc… и т. д. 
3. Символ плюса (+)  

Он указывает компьютеру повторить предыдущий символ ( или набор символов) по крайней мере один или несколько раз (до бесконечности).

  Пример:  Регулярное выражение ab+c даст abc, abc,
абв, … и так далее. 
4. Фигурные скобки { … }  

Он говорит компьютеру повторить предшествующий символ (или набор символов) столько раз, сколько значение находится в этой скобке.

  Пример:  {2} означает, что предыдущий символ должен повторяться 2
times, {min,} означает, что предшествующий символ соответствует min или более
раз. {min,max} означает, что предыдущий символ повторяется в
минимум мин и максимум макс раз. 
5. Подстановочный знак ( . )  ​​

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

  Пример: 
Регулярное выражение .* сообщит компьютеру, что любой символ
можно использовать любое количество раз. 
6. Необязательный символ ( ? )  

Этот символ сообщает компьютеру, что предшествующий символ может присутствовать или отсутствовать в строке для сопоставления.

  Пример: 
Мы можем записать формат файла документа как — «docx?»
'?' сообщает компьютеру, что x может быть, а может и не быть.
присутствует в названии формата файла. 9\d{3} будет соответствовать таким шаблонам, как "901" в "901-333-". 

8. Символ доллара ($)  

Он сообщает компьютеру, что совпадение должно происходить в конце строки или перед \n в конце строки или строки.

  Пример:  -\d{3}$ будет соответствовать таким шаблонам, как "-333" в "-901-333". 

9. Классы символов  

Класс символов соответствует любому из набора символов. Он используется для сопоставления самых основных элементов языка, таких как буква, цифра, пробел, символ и т. д. 

\s : соответствует любым пробельным символам, таким как пробел и табуляция.
\S : соответствует любым непробельным символам.
\d : соответствует любому цифровому символу.
\D: соответствует любым нецифровым символам.
\w : соответствует любому символу слова (в основном буквенно-цифровому)
\W : соответствует любому символу, не являющемуся словом.
\b : соответствует любой границе слова (включая пробелы, тире, запятые, точки с запятой и т. д. 9abc] будет соответствовать любому символу, кроме a,b,c.

11. [первый-последний] Диапазон символов:  

Соответствует любому одиночному символу в диапазоне от первого до последнего.

  Пример:  [a-zA-z] будет соответствовать любому символу от a до z или от A до Z. 
12. Символ перехода (  \  ) 

', '.' и т. д., добавьте обратную косую черту (\) перед этим символом. Это укажет компьютеру рассматривать следующий символ как символ поиска и рассматривать его как соответствующий шаблон.

  Пример:  \d+[\+-x\*]\d+ будет соответствовать таким шаблонам, как "2+2"
и "3*9" в "(2+2) * 3*9".  
13. Группировка символов ( )  

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

  Пример:  ([A-Z]\w+) содержит два разных элемента обычного
выражение, объединенное вместе. Это выражение будет соответствовать любому шаблону
содержащий заглавную букву, за которой следует любой символ. 
14. Вертикальная черта (  |  )  

Соответствует любому элементу, разделенному вертикальной чертой (|).

  Пример:  th(e|is|at) будет соответствовать словам - the, this и that. 
15. \number 

Обратная ссылка: позволяет идентифицировать ранее совпавшее подвыражение (выражение, захваченное или заключенное в круглые скобки) в том же регулярном выражении. \n означает, что группа, заключенная в n-ю скобку, будет повторяться в текущей позиции.