декларирует начало данных (или строки в многострочном режиме)$декларирует конец данных или до завершения строки (или окончание строки в многострочном режиме).соответствует любому символу, кроме перевода строки (по умолчанию)[начало описания символьного класса]конец описания символьного класса|начало ветки альтерннативного выбора(начало подмаски)конец подмаски?расширяет смысл метасимвола (, является также квантификатором, означающим 0 или 1 вхождение, также преобразует жадные квантификаторы в ленивые)*квантификатор, означающий 0 или более вхождений+квантификатор, означающий 1 или более вхождений{начало количественного квантификатора}

конец количественного квантификатора


Содержание

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


Открывающая квадратная скобка объявляет начало символьного класса, завершаемого закрывающей квадратной скобкой.
]
негативный класс символов («любое кроме»)-тире — обозначение последовательности в классе символов («[0-9]» — цифры)alnumбуквы и цифрыalphaбуквыasciiсимволы с кодами 0 — 127blankтолько пробел или символ табуляцииcntrlуправляющие символыdigitдесятичные цифры (то же самое, что и \d)graphпечатные символы, исключая пробелlowerстрочные буквыprintпечатные символы, включая пробелpunctпечатные символы, исключая буквы и цифрыspaceпробельные символы(почти то же самое, что и \s)upperпрописные буквыwordсимволы «слова» (то же самое, что и \w)xdigitшестнадцатеричные цифры

Класс пробельных символов space— это горизонтальная табуляция, перевод строки, вертикальная табуляция, разрыв страницы, возврат каретки и пробел.digit:]]совпадет с «1», «2», или с любой не-цифрой.

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

*Соответствие возникнет, если предыдущий символ будет повторяться любое число раз (в том числе и 0раз).
+Соответствие возникнет, если предыдущий символ будет повторяться хотя бы один раз. То есть отличие от квантификатора *, здесь требуется, чтобы предшествующий символ был бы хотя бы один раз.
?Соответствие возникнет, если предыдущего символа вообще не было, либо он был только один раз.
{n}Соответствие возникнет, если предыдущий символ будет повторяться ровно nраз.
{n,}Соответствие возникнет, если предыдущий символ будет повторяться nили более раз.
{n,m}Соответствие возникнет, если предыдущий символ будет повторяться от nдо mраз., то шаблон ограничен для совпадения исключительно в начале строки, говорят что шаблон «заякорен». (Существуют и другие способы «заякорить» шаблон).

Соответствие метасимволу конца строки $достигается только в конце строки или непосредственно перед последним символом в случае, если им является перевод строки (если модификаторы не указаны). Метасимвол конца строки $не обязан быть последним символом шаблона в случае, если используется несколько альтернатив, но должен быть последним символом в каждой альтернативе, в которой он фигурирует. Внутри символьного класса символ $не имеет специального значения.

Альтернативный выбор

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

Условные подмаски

В PCRE реализована возможность подчинять шаблон условию либо выбирать из двух условных подмасок в зависимости от успеха сопоставления предыдущей подмаски. Условные подмаски имеют две допустимые формы использования:

(?(condition)yes-pattern)В случае выполения условия condition, используется подмаска yes-pattern
(?(condition)yes-pattern|no-pattern)В случае выполения условия condition, используется подмаска yes-pattern, в противном случае no-pattern

Условия бывают двух видов. В случае, если между скобками заключены цифры, условие будет выполняться в том случае, если подмаска с соответствующим номером была успешно сопоставлена.()]+ (?(1) \) )

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

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

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

Если условием является строка (R), оно будет выполнено, если будет произведен рекурсивный вызов к шаблону или подмаске. На «самом верхнем уровне» условие ложно.a-z]*[a-z])

\d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} )

Приведен пример с утверждающим условием касательно предшествующего текста, которое выполняется для необязательной последовательности не-букв с последующей буквой. Говоря другими словами, указанное условие проверяет наличие хотя бы одной предшествующей буквы. В случае, если буква найдена, выполняется сопоставление с первой альтернативой, в противном случае — со второй альтернативой. Приведенный шаблон соответствует строкам двух видов: dd-aaa-dd либо dd-dd-dd, где aaaa — это буквы, а dd — цифры.

Комментарии

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

PHP функции по работе с регулярными выражениями

  • preg_grep — Возвращает массив вхождений, которые соответствуют шаблону
  • preg_match — Выполняет проверку на соответствие регулярному выражению
  • preg_match_all — Выполняет глобальный поиск шаблона в строке
  • preg_replace — Выполняет поиск и замену по регулярному выражению
  • preg_replace_callback — Выполняет поиск по регулярному выражению и замену
  • preg_split — Разбивает строку по регулярному выражению
  • preg_quote — Экранирует символы в регулярных выражениях
  1. Регулярные выражения
  2. Примеры
  3. RegExp

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



  • Чтение занимает 10 мин


В этой статье

Регулярное выражение – это шаблон, который обработчик регулярных выражений пытается сопоставить с введенным текстом.A regular expression is a pattern that the regular expression engine attempts to match in input text. Шаблон состоит из односимвольных или многосимвольных литералов, операторов или конструкций.A pattern consists of one or more character literals, operators, or constructs. См. краткое описание регулярных выражений .NET.For a brief introduction, see .NET Regular Expressions.

В каждом разделе этого краткого справочника приводится перечень конкретной категории символов, операторов и конструкций, которые можно использовать для задания регулярных выражений.Each section in this quick reference lists a particular category of characters, operators, and constructs that you can use to define regular expressions.

Мы также представили эту информацию в двух форматах, чтобы вы могли ее скачать и распечатать для справки:We’ve also provided this information in two formats that you can download and print for easy reference:

Escape-знакиCharacter Escapes

Обратная косая черта (\) в регулярных выражениях указывает, что следующий за ней символ либо является специальным знаком (как показано в следующей таблице), либо должен интерпретироваться буквально.The backslash character (\) in a regular expression indicates that the character that follows it either is a special character (as shown in the following table), or should be interpreted literally. Дополнительные сведения см. в разделе Escape-символы.For more information, see Character Escapes.

Escape-символEscaped characterОписаниеDescriptionШаблонPatternЧисло соответствийMatches
\aСоответствует знаку колокольчика, \u0007.Matches a bell character, \u0007.\a"\u0007" в "Error!" + '\u0007'"\u0007" in "Error!" + '\u0007'
\bВ классе символов соответствует знаку BACKSPACE, \u0008.In a character class, matches a backspace, \u0008.[\b]{3,}"\b\b\b\b" в "\b\b\b\b""\b\b\b\b" in "\b\b\b\b"
\tСоответствует знаку табуляции, \u0009.Matches a tab, \u0009.(\w+)\t"item1\t", "item2\t" в "item1\titem2\t""item1\t", "item2\t" in "item1\titem2\t"
\rСоответствует знаку возврата каретки, \u000D.Matches a carriage return, \u000D. (\r не эквивалентен знаку начала новой строки, \n.)(\r is not equivalent to the newline character, \n.)\r\n(\w+)"\r\nThese" в "\r\nThese are\ntwo lines.""\r\nThese" in "\r\nThese are\ntwo lines."
\vСоответствует знаку вертикальной табуляции, \u000B.Matches a vertical tab, \u000B.[\v]{2,}"\v\v\v" в "\v\v\v""\v\v\v" in "\v\v\v"
\fСоответствует знаку перевода страницы, \u000C.Matches a form feed, \u000C.[\f]{2,}"\f\f\f" в "\f\f\f""\f\f\f" in "\f\f\f"
\nСоответствует знаку новой строки, \u000A.Matches a new line, \u000A.\r\n(\w+)"\r\nThese" в "\r\nThese are\ntwo lines.""\r\nThese" in "\r\nThese are\ntwo lines."
\eСоответствует escape-знаку, \u001B.Matches an escape, \u001B.\e"\x001B" в "\x001B""\x001B" in "\x001B"
\ nnn\ nnnИспользует восьмеричное представление для указания символа ( nnn состоит из двух или трех цифр).Uses octal representation to specify a character ( nnn consists of two or three digits).\w\040\w"a b", "c d" в "a bc d""a b", "c d" in "a bc d"
\x nn\x nnИспользует шестнадцатеричное представление для указания символа ( nn состоит ровно из двух цифр).Uses hexadecimal representation to specify a character ( nn consists of exactly two digits).\w\x20\w"a b", "c d" в "a bc d""a b", "c d" in "a bc d"
\c X\c X

\c x\c x

Соответствует управляющему символу ASCII, который задан как X или x , где X или x является буквой управляющего символа.Matches the ASCII control character that is specified by X or x , where X or x is the letter of the control character.\cC"\x0003" в "\x0003" (Ctrl-C)"\x0003" in "\x0003" (Ctrl-C)
\u nnnn\u nnnnСовпадение со знаком Юникода в шестнадцатеричном представлении (строго четыре цифры, представленные как nnnn ).Matches a Unicode character by using hexadecimal representation (exactly four digits, as represented by nnnn ).\w\u0020\w"a b", "c d" в "a bc d""a b", "c d" in "a bc d"
\Если за этим знаком следует символ, не распознанный как escape-символ из этой и других таблиц данной темы, то соответствует в точности этому символу.When followed by a character that is not recognized as an escaped character in this and other tables in this topic, matches that character. Например, \* — это то же самое, что и \x2A, а \. — то же самое, что и \x2E.For example, \* is the same as \x2A, and \. is the same as \x2E. Это позволяет обработчику регулярных выражений распознавать языковые элементы (такие как *или ?) и символьные литералы (представленные как \* или \?).This allows the regular expression engine to disambiguate language elements (such as * or ?) and character literals (represented by \* or \?).\d+[\+-x\*]\d+"2+2" и "3*9" в "(2+2) * 3*9""2+2" and "3*9" in "(2+2) * 3*9"

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

Класс символов соответствует какому-либо одному набору символов.A character class matches any one of a set of characters. Классы символов состоят из языковых элементов, приведенных в следующей таблице.aei]

"r", "g", "n" в "reign""r", "g", "n" in "reign"
[ first - last ][ first - last ]Диапазон символов: соответствует одному символу в диапазоне от первого до последнего .Character range: Matches any single character in the range from first to last .[A-Z]"A", "B" в "AB123""A", "B" in "AB123"
.Подстановочный знак: соответствует любому одиночному символу, кроме \n.Wildcard: Matches any single character except \n.

Для сопоставления символа точки (.To match a literal period character (. или \u002E) перед ней нужно поставить дополнительную обратную косую черту (\.).or \u002E), you must precede it with the escape character (\.).

a.e"ave" в "nave""ave" in "nave"

"ate" в "water""ate" in "water"

\p{ имя }\p{ name }Соответствует любому одиночному символу в общей категории Юникода или в именованном блоке, указанном в параметре имя .Matches any single character in the Unicode general category or named block specified by name .\p{Lu}

\p{IsCyrillic}

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

"Д", "Ж" в "ДЖem""Д", "Ж" in "ДЖem"

\P{ имя }\P{ name }Соответствует любому одиночному символу, не входящему в общую категорию Юникода или в именованный блок, указанный в параметре имя .Matches any single character that is not in the Unicode general category or named block specified by name .\P{Lu}

\P{IsCyrillic}

"i", "t", "y" в "City""i", "t", "y" in "City"

"e", "m" в "ДЖem""e", "m" in "ДЖem"

\wСоответствует любому алфавитно-цифровому знаку.Matches any word character.\w"I", "D", "A", "1", "3" в "ID A1.3""I", "D", "A", "1", "3" in "ID A1.3"
\WСоответствует любому символу, который не является буквенно-цифровым знаком.Matches any non-word character.\W" ", "." в "ID A1.3"" ", "." in "ID A1.3"
\sСоответствует любому знаку пробела.Matches any white-space character.\w\s"D " в "ID A1.3""D " in "ID A1.3"
\SСоответствует любому знаку, не являющемуся пробелом.Matches any non-white-space character.\s\S" _" в "int __ctr"" _" in "int __ctr"
\dСоответствует любой десятичной цифре.Matches any decimal digit.\d"4" в "4 = IV""4" in "4 = IV"
\DСоответствует любому символу, не являющемуся десятичной цифрой.Matches any character other than a decimal digit.\D" ", "=", " ", "I", "V" в "4 = IV"" ", "=", " ", "I", "V" in "4 = IV"

ПривязкиAnchors

Привязки, или атомарные утверждения нулевой ширины, приводят к успеху или сбою сопоставления, в зависимости от текущей позиции в строке, но не предписывают обработчику перемещаться по строке или обрабатывать символы.\d{3}"901" в "901-333-""901" in "901-333-"$По умолчанию соответствие должно обнаруживаться в конце строки или перед символом \n в конце строки. В многострочном режиме соответствие должно обнаруживаться до конца линии или перед символом \n в конце линии.By default, the match must occur at the end of the string or before \n at the end of the string; in multiline mode, it must occur before the end of the line or before \n at the end of the line.-\d{3}$"-333" в "-901-333""-333" in "-901-333"\AСоответствие должно обнаруживаться в начале строки.The match must occur at the start of the string.\A\d{3}"901" в "901-333-""901" in "901-333-"\ZСоответствие должно обнаруживаться в конце строки или до символа \n в конце строки.The match must occur at the end of the string or before \n at the end of the string.-\d{3}\Z"-333" в "-901-333""-333" in "-901-333"\zСоответствие должно обнаруживаться в конце строки.The match must occur at the end of the string.-\d{3}\z"-333" в "-901-333""-333" in "-901-333"\GСоответствие должно обнаруживаться в той точке, где заканчивается предыдущее соответствие.The match must occur at the point where the previous match ended.\G\(\d\)"(1)", "(3)", "(5)" в "(1)(3)(5)[7](9)""(1)", "(3)", "(5)" in "(1)(3)(5)[7](9)"\bСоответствие должно обнаруживаться на границе между символом \w (алфавитно-цифровым) и символом \W (не алфавитно-цифровым).The match must occur on a boundary between a \w (alphanumeric) and a \W (nonalphanumeric) character.\b\w+\s\w+\b"them theme", "them them" в "them theme them them""them theme", "them them" in "them theme them them"\BСоответствие не должно обнаруживаться на границе \b.The match must not occur on a \b boundary.\Bend\w*\b"ends", "ender" в "end sends endure lender""ends", "ender" in "end sends endure lender"

Конструкции группированияGrouping Constructs

Конструкции группирования отображают части выражений регулярных выражений и обычно захватывают части строки входной строки.Grouping constructs delineate subexpressions of a regular expression and typically capture substrings of an input string. Конструкции группирования состоят из языковых элементов, приведенных в следующей таблице.Grouping constructs include the language elements listed in the following table. Для получения дополнительной информации см. Конструкции группирования.For more information, see Grouping Constructs.

Конструкция группированияGrouping constructОписаниеDescriptionШаблонPatternЧисло соответствийMatches
( subexpression )( subexpression )Захватывает соответствующую часть выражения и назначает ей порядковый номер, отсчитываемый от единицы.Captures the matched subexpression and assigns it a one-based ordinal number.(\w)\1"ee" в "deep""ee" in "deep"
(?< name > subexpression )(?< name > subexpression )
oror
(?' name ' subexpression )(?' name ' subexpression )
Выделяет соответствующую часть выражения в именованную группу.Captures the matched subexpression into a named group.(?<double>\w)\k<double>"ee" в "deep""ee" in "deep"
(?< name1 - name2 > subexpression )(?< name1 - name2 > subexpression )
oror
(?' name1 - name2 ' subexpression )(?' name1 - name2 ' subexpression )
Задает сбалансированное определение группы.Defines a balancing group definition. Дополнительные сведения см. в разделе «Сбалансированное определение группы» статьи Конструкции группирования.For more information, see the «Balancing Group Definition» section in Grouping Constructs.(((?'Open'\()[^\(\)]*)+((?'Close-Open'\))[^\(\)]*)+)*(?(Open)(?!))$"((1-3)*(3-1))" в "3+2^((1-3)*(3-1))""((1-3)*(3-1))" in "3+2^((1-3)*(3-1))"
(?: subexpression )(?: subexpression )Определяет невыделяемую группу.Defines a noncapturing group.Write(?:Line)?"WriteLine" в "Console.WriteLine()""WriteLine" in "Console.WriteLine()"

"Write" в "Console.Write(value)""Write" in "Console.Write(value)"

(?imnsx-imnsx: subexpression )(?imnsx-imnsx: subexpression )Применяет или отключает указанные параметры в части выражения .Applies or disables the specified options within subexpression . Для получения дополнительной информации см. Параметры регулярных выражений.For more information, see Regular Expression Options.A\d{2}(?i:\w+)\b"A12xl", "A12XL" в "A12xl A12XL a12xl""A12xl", "A12XL" in "A12xl A12XL a12xl"
(?= subexpression )(?= subexpression )Утверждение положительного просмотра вперед нулевой ширины.Zero-width positive lookahead assertion.\w+(?=\.)"is", "ran" и "out" в "He is. The dog ran. The sun is out.""is", "ran", and "out" in "He is. The dog ran. The sun is out."
(?! subexpression )(?! subexpression )Утверждение отрицательного просмотра вперед нулевой ширины.Zero-width negative lookahead assertion.\b(?!un)\w+\b"sure", "used" в "unsure sure unity used""sure", "used" in "unsure sure unity used"
(?<= subexpression )(?<= subexpression )Утверждение положительного просмотра назад нулевой ширины.Zero-width positive lookbehind assertion.(?<=19)\d{2}\b"99", "50", "05" в "1851 1999 1950 1905 2003""99", "50", "05" in "1851 1999 1950 1905 2003"
(?<! subexpression )(?<! subexpression )Утверждение отрицательного просмотра назад нулевой ширины.Zero-width negative lookbehind assertion.(?<!19)\d{2}\b"51", "03" в "1851 1999 1950 1905 2003""51", "03" in "1851 1999 1950 1905 2003"
(?> subexpression )(?> subexpression )Атомарная группа.Atomic group.[13579](?>A+B+)"1ABB", "3ABB" и "5AB" в "1ABB 3ABBC 5AB 5AC""1ABB", "3ABB", and "5AB" in "1ABB 3ABBC 5AB 5AC"

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

Квантор указывает количество вхождений предшествующего элемента (знака, группы или класса знаков), которое должно присутствовать во входной строке, чтобы было зафиксировано соответствие.A quantifier specifies how many instances of the previous element (which can be a character, a group, or a character class) must be present in the input string for a match to occur. Кванторы состоят из языковых элементов, приведенных в следующей таблице.Quantifiers include the language elements listed in the following table. Для получения дополнительной информации см. Квантификаторы.For more information, see Quantifiers.

КвантификаторQuantifierОписаниеDescriptionШаблонPatternЧисло соответствийMatches
*Соответствует предыдущему элементу ноль или более раз.Matches the previous element zero or more times.\d*\.\d".0", "19.9", "219.9"".0", "19.9", "219.9"
+Соответствует предыдущему элементу один или более раз.Matches the previous element one or more times."be+""bee" в "been", "be" в "bent""bee" in "been", "be" in "bent"
?Соответствует предыдущему элементу ноль или один раз.Matches the previous element zero or one time."rai?n""ran", "rain""ran", "rain"
{ n }{ n }Предыдущий элемент повторяется ровно n раз.Matches the previous element exactly n times.",\d{3}"",043" в "1,043.6", ",876", ",543" и ",210" в "9,876,543,210"",043" in "1,043.6", ",876", ",543", and ",210" in "9,876,543,210"
{ n ,}{ n ,}Предыдущий элемент повторяется как минимум n раз.Matches the previous element at least n times."\d{2,}""166", "29", "1930""166", "29", "1930"
{ n , m }{ n , m }Предыдущий элемент повторяется как минимум n раз, но не более чем m раз.Matches the previous element at least n times, but no more than m times."\d{3,5}""166", "17668""166", "17668"

"19302" в "193024""19302" in "193024"

*?Предыдущий элемент не повторяется вообще или повторяется, но как можно меньшее число раз.Matches the previous element zero or more times, but as few times as possible.\d*?\.\d".0", "19.9", "219.9"".0", "19.9", "219.9"
+?Предыдущий элемент повторяется один или несколько раз, но как можно меньшее число раз.Matches the previous element one or more times, but as few times as possible."be+?""be" в "been", "be" в "bent""be" in "been", "be" in "bent"
??Предыдущий элемент не повторяется или повторяется один раз, но как можно меньшее число раз.Matches the previous element zero or one time, but as few times as possible."rai??n""ran", "rain""ran", "rain"
{ n }?{ n }?Предыдущий элемент повторяется ровно n раз.Matches the preceding element exactly n times.",\d{3}?"",043" в "1,043.6", ",876", ",543" и ",210" в "9,876,543,210"",043" in "1,043.6", ",876", ",543", and ",210" in "9,876,543,210"
{ n ,}?{ n ,}?Предыдущий элемент повторяется как минимум n раз (как можно меньше).Matches the previous element at least n times, but as few times as possible."\d{2,}?""166", "29", "1930""166", "29", "1930"
{ n , m }?{ n , m }?Предыдущий элемент повторяется не менее n и не более m раз (как можно меньше).Matches the previous element between n and m times, but as few times as possible."\d{3,5}?""166", "17668""166", "17668"

"193", "024" в "193024""193", "024" in "193024"

Конструкции обратных ссылокBackreference Constructs

Обратная ссылка позволяет впоследствии идентифицировать ранее найденную соответствующую часть выражения в том же регулярном выражении.A backreference allows a previously matched subexpression to be identified subsequently in the same regular expression. В следующей таблице перечислены конструкции обратных ссылок, поддерживаемые регулярными выражениями .NET.The following table lists the backreference constructs supported by regular expressions in .NET. Для получения дополнительной информации см. Конструкции обратных ссылок.For more information, see Backreference Constructs.

Конструкция обратных ссылокBackreference constructОписаниеDescriptionШаблонPatternЧисло соответствийMatches
\ число\ numberОбратная ссылка.Backreference. Соответствует значению нумерованной части выражения.Matches the value of a numbered subexpression.(\w)\1"ee" в "seek""ee" in "seek"
\k< имя >\k< name >Именованная обратная ссылка.Named backreference. Соответствует значению именованного выражения.Matches the value of a named expression.(?<char>\w)\k<char>"ee" в "seek""ee" in "seek"

Конструкции чередованияAlternation Constructs

Конструкции изменения модифицируют регулярное выражение, включая сопоставление по принципу «либо-либо».Alternation constructs modify a regular expression to enable either/or matching. Такие конструкции состоят из языковых элементов, приведенных в следующей таблице.These constructs include the language elements listed in the following table. Дополнительные сведения см. в разделе Конструкции чередования.For more information, see Alternation Constructs.

Конструкция измененияAlternation constructОписаниеDescriptionШаблонPatternЧисло соответствийMatches
|Соответствует любому элементу, разделенному вертикальной чертой (|).Matches any one element separated by the vertical bar (|) character.th(e|is|at)"the", "this" в "this is the day.""the", "this" in "this is the day."
(?( expression ) yes | no )(?( expression ) yes | no )Соответствует да в случае соответствия шаблона регулярного выражения, определяемого выражением ; в противном случае соответствует дополнительной части нет .Matches yes if the regular expression pattern designated by expression matches; otherwise, matches the optional no part. Выражение интерпретируется как утверждение нулевой ширины.expression is interpreted as a zero-width assertion.(?(A)A\d{2}\b|\b\d{3}\b)"A10", "910" в "A10 C103 910""A10", "910" in "A10 C103 910"
(?( name ) yes | no )(?( name ) yes | no )Соответствует да в случае соответствия именованной или нумерованной группы захвата имя ; в противном случае соответствует дополнительной части нет .Matches yes if name , a named or numbered capturing group, has a match; otherwise, matches the optional no .(?<quoted>")?(?(quoted).+?"|\S+\s)"Dogs.jpg ", "\"Yiska playing.jpg\"" в "Dogs.jpg \"Yiska playing.jpg\"""Dogs.jpg ", "\"Yiska playing.jpg\"" in "Dogs.jpg \"Yiska playing.jpg\""

ПодстановкиSubstitutions

Подстановки — это языковые элементы регулярных выражений, которые поддерживаются в шаблонах замены.Substitutions are regular expression language elements that are supported in replacement patterns. Для получения дополнительной информации см. Подстановки.For more information, see Substitutions. Приведенные в следующей таблице метасимволы являются атомарными утверждениями нулевой ширины.The metacharacters listed in the following table are atomic zero-width assertions.

ЗнакCharacterОписаниеDescriptionШаблонPatternШаблон заменыReplacement patternВходная строкаInput stringРезультирующая строкаResult string
$ число$ numberЗамещает часть строки, соответствующую группе число .Substitutes the substring matched by group number .\b(\w+)(\s)(\w+)\b$3$2$1"one two""two one"
${ имя }${ name }Замещает часть строки, соответствующую именованной группе имя .Substitutes the substring matched by the named group name .\b(?<word1>\w+)(\s)(?<word2>\w+)\b${word2} ${word1}"one two""two one"
$$Подставляет литерал «$».Substitutes a literal «$».\b(\d+)\s?USD$$$1"103 USD""$103"
$&Замещает копией полного соответствия.Substitutes a copy of the whole match.\$?\d*\.?\d+**$&**"$1.30""**$1.30**"
$` Замещает весь текст входной строки до соответствия.Substitutes all the text of the input string before the match.B+$` "AABBCC""AAAACC"
$'Замещает весь текст входной строки после соответствия.Substitutes all the text of the input string after the match.B+$'"AABBCC""AACCCC"
$+Замещает последнюю захваченную группу.Substitutes the last group that was captured.B+(C+)$+"AABBCCDD""AACCDD"
$_Замещает всю входную строку.Substitutes the entire input string.B+$_"AABBCC""AAAABBCCCC"

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

Можно определить параметры, управляющие интерпретацией шаблона регулярного выражения обработчиком регулярных выражений.You can specify options that control how the regular expression engine interprets a regular expression pattern. Многие из этих параметров можно указать в шаблоне регулярного выражения либо в виде одной или нескольких констант RegexOptions.Many of these options can be specified either inline (in the regular expression pattern) or as one or more RegexOptions constants. Этот краткий справочник перечисляет только встраиваемые параметры.This quick reference lists only inline options. Дополнительные сведения о встроенных параметрах и параметрах RegexOptions см. в статье Параметры регулярных выражений.For more information about inline and RegexOptions options, see the article Regular Expression Options.

Встроенный параметр можно задать двумя способами:You can specify an inline option in two ways:

  • С помощью прочих конструкций (?imnsx-imnsx), где минус (-) перед параметром или набором параметров отключает эти параметры.By using the miscellaneous construct (?imnsx-imnsx), where a minus sign (-) before an option or set of options turns those options off. Например, (?i-mn) включает сопоставление без учета регистра (i), отключает многострочный режим (m) и отключает захват неименованных групп (n).For example, (?i-mn) turns case-insensitive matching (i) on, turns multiline mode (m) off, and turns unnamed group captures (n) off. Параметр применяется к шаблону регулярного выражения от точки, в которой определен параметр, и действует либо до конца шаблона, либо до точки, в которой другая конструкция отменяет параметр.The option applies to the regular expression pattern from the point at which the option is defined, and is effective either to the end of the pattern or to the point where another construct reverses the option.
  • С помощью конструкции группирования(?imnsx-imnsx:часть выражения), которая определяет параметры для только для указанной группы.By using the grouping construct(?imnsx-imnsx:subexpression), which defines options for the specified group only. and $ match the beginning and end of a line, instead of the beginning and end of a string.Пример см. в подразделе «Многострочный режим» раздела Параметры регулярных выражений.For an example, see the «Multiline Mode» section in Regular Expression Options.nНе захватывать неименованные группы.Do not capture unnamed groups.Пример см. в подразделе «Только явные захваты» раздела Параметры регулярных выражений.For an example, see the «Explicit Captures Only» section in Regular Expression Options.sИспользовать однострочный режим.Use single-line mode.Пример см. в подразделе «Однострочный режим» раздела Параметры регулярных выражений.For an example, see the «Single-line Mode» section in Regular Expression Options.xИгнорировать знаки пробела в шаблоне регулярного выражения, не преобразованные в escape-последовательность.Ignore unescaped white space in the regular expression pattern.\b(?x) \d+ \s \w+"1 aardvark", "2 cats" в "1 aardvark 2 cats IV centurions""1 aardvark", "2 cats" in "1 aardvark 2 cats IV centurions"

    Прочие конструкцииMiscellaneous Constructs

    Прочие конструкции либо изменяют шаблон регулярных выражений, либо предоставляют сведения о нем.Miscellaneous constructs either modify a regular expression pattern or provide information about it. В следующей таблице перечислены все прочие конструкции, поддерживаемые .NET.The following table lists the miscellaneous constructs supported by .NET. Для получения дополнительной информации см. Прочие конструкции.For more information, see Miscellaneous Constructs.

    КонструкцияConstructОпределениеDefinitionПримерExample
    (?imnsx-imnsx)Устанавливает или отключает такие параметры, как учет регистра в середине шаблона. Дополнительные сведения см. в статье Параметры регулярных выражений.Sets or disables options such as case insensitivity in the middle of a pattern.For more information, see Regular Expression Options.\bA(?i)b\w+\b соответствует "ABA", "Able" в "ABA Able Act"\bA(?i)b\w+\b matches "ABA", "Able" in "ABA Able Act"
    (?# comment )(?# comment )Встроенное примечание.Inline comment. Примечание заканчивается первой закрывающей скобкой.The comment ends at the first closing parenthesis.\bA(?#Matches words starting with A)\w+\b
    # [до конца строки]# [to end of line]Комментарий режима X.X-mode comment. Примечание начинается от знака # без обратной косой черты и продолжается до конца строки.The comment starts at an unescaped # and continues to the end of the line.(?x)\bA\w+\b#Matches words starting with A

    См. такжеSee also

    (Не бойтесь) Regexs: практическое руководство по регулярным выражениям

    Перевод статьи
    Джоша Хокинса «(Don’t Fear) The Regex: A Practical
    Introduction to Regular Expressions».

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

    Но как насчет использования множества
    строк? Или использования строк, которые
    генерировала не ваша программа? Возможно,
    вам нужно выбрать все аргументы командной
    строки из email. Или вы читаете инструкции,
    написанные для людей, и вам нужен какой-то
    более структурированный способ, чтоб
    с этим справиться.

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

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

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

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

    Учимся писать регулярные
    выражения

    Регулярное выражение ограничивается
    слэшами – //. Строка совпадает с регулярным
    выражением, если она совпадает с шаблоном
    между двумя косыми чертами. Например,
    «Привет» совпадает с /Привет/. Поэтому
    мы можем использовать данное регулярное
    выражение для поиска слова «Привет» в
    строке.

    Регулярным выражением может быть строка (набор символов). Введенная обычным образом. Например, /Hello World/ будет соответствовать строке «Hello World».

    Если нам нужно найти любое слово
    (имеется в виду отдельное слово, состоящее
    только из букв), мы можем упростить
    поиск, применив немного магии regex: \w
    будет соответствовать любому одному
    слову в строке (w – word – «слово»).

    Аналогичный подход можно применять
    к цифрам: \d.

    Пример 1

    То, что мы можем посмотреть, соответствуют
    ли какие-то элементы строки заданному
    шаблону, это, конечно, хорошо. Но где это
    может быть полезно?

    Допустим, мы написали чат-бота, который
    отслеживает упоминание в разговоре
    имени «Джош» (имя автора статьи, – прим.
    перев.). В общем, наш бот сканирует каждое
    сообщение в чате, пока не найдет
    соответствие. Если найдет, то отсылает
    сообщение: «Ох, я надеюсь, вы не говорите
    плохо о моем приятеле Джоше!».

    Для поиска соответствий наш бот будет
    использовать шаблон /Джош/.

    Внезапно в чате появляется сообщение:
    «Эли: Джош, тебе в самом деле нужно так
    много кофеина?».

    Наш бот сканирует это сообщение и
    находит совпадение с шаблоном! Он
    отсылает свой стандартный ответ, пугая
    Эли. Миссия выполнена!

    Или нет? Что, если бы наш робот был
    немного смышленее? Что, если бы он
    обращался к человеку пои мени? Например,
    писал бы: « Ох, я надеюсь, вы не говорите
    плохо о моем приятеле Джоше, Эли!».

    Это возможно. Но для начала нам нужно
    кое-что изучить. Начнем с квантификаторов.

    Регулярные выражения помогут найти иголку в стогу сена.

    Квантификаторы (указатели
    количества вхождений символов)

    0 или много

    Символ «звездочка» – * – означает
    любое количество (в том числе нулевое)
    вхождений символа, после которого эта
    звездочка стоит. Например, /a*/ будет
    соответствовать «aaaaa», а также «». Верно,
    это может быть и пустая строка.

    Звездочка служит для обозначения
    чего-то опционального, потому что
    обозначаемый ею символ может не
    существовать. А может и существовать.
    И «существовать» много, много раз
    (теоретически – бесконечное количество
    раз).

    Регулярное выражение /Джош/ дает нам
    совпадение с «Джош». А выражение /Д*жош/
    будет совпадать также с «ДДДДДДДжош»
    и «жош».

    1 или много

    Знак «плюс» – + – означает любое
    количество вхождений символа, после
    которого этот плюс стоит, но не менее
    одного вхождения. Он работает так же,
    как и «звездочка», за исключением того,
    что нулевое вхождение символа здесь
    невозможно. Для совпадения должно быть
    хотя бы одно вхождение.

    Таким образом, выражению /Д+жош/ будет
    соответствовать «Джош» и «ДДДДДДДжош»,
    но не «жош».

    Шаблоны (специальные символы)

    Отлично, теперь мы можем находить
    больше интересных вещей. Может, в этом
    чате кто-нибудь будет сильно зол на меня
    и будет кричать «Джоооооош!»…

    А что если этот «кто-то» будет аж так
    зол, что прямо будет головой об клавиатуру
    биться? Как нам выловить в чате
    «лавыофылджвоа», если мы не знаем, на
    какую клавишу пришелся его нос?

    С помощью шаблонов!

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

    Мы можем использовать этот шаблон
    поиска в комбинации с уже известными
    нам квантификаторами: /Дж+.*ош/. Давайте
    разберем. Здесь у нас будет одно вхождение
    «Д», одно или больше вхождение «ж», ноль
    или много любых символов (.*) и одно
    вхождение «ош». Можно проследить, что
    здесь у нас определенные группы.

    Группировка символов

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

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

    Например, мы хотим повторить «Джо»,
    но не «ш». Чтобы шаблону соответствовало
    «ДжоДжоДжоДжоДжош». Сделать это можно
    с помощью регулярного выражения
    /(Джо)+ш/. Просто, правда?

    И наконец, давайте вернемся к нашему
    примеру с чат-ботом. Как нам «выловить»
    из строки имя Эли, чтобы бот мог обратиться
    именно к ней?

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

    Для этого обычно вам нужно будет
    использовать что-то вроде \1 – это
    соответствует первой определенной
    группе.

    Возьмем для примера регулярное
    выражение /(.+) \1/. Здесь мы видим группу
    случайных символов, которая встречается
    один раз или больше, после которой идет
    пробел, а затем идет повтор тех же
    символов. Таким образом, с этим шаблоном
    будет совпадать «абв абв», но не «абв
    где», хотя сама по себе группа символов
    «где» совпадает с шаблоном (.+).

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

    Пример 2

    Ффухх! Давайте теперь продолжим нашу
    историю с чат-ботом и используем то,
    чему мы научились, чтобы определить,
    кто вспоминает Джоша.

    Сообщение в чате выглядело так: «Эли:
    Джош, тебе в самом деле нужно так много
    кофеина?».

    Если мы хотим «выловить» имя отправителя
    сообщения, наше регулярное выражение
    может выглядеть следующим образом:

    /(\w+): .*Джош.*/.

    В этом выражении мы видим:

    • (\w+): – группу из одного или больше
      слов, за которой следует двоеточие,
    • .* – любые символы, встречающиеся
      любое количество раз, включая ноль,
    • строку «Джош», за которой опять
      следуют
    • .* – любые символы, встречающиеся
      любое количество раз, включая ноль.

    Памятка: регулярное выражение
    /.*слово.*/ это простой способ найти
    вхождения строки «слово», по бокам
    которой могут быть, а могут и не быть
    любые другие слова и символы.

    В Python это регулярное выражение может
    выглядеть так:

    [python]import re
    pattern = re.compile(ur'(\w+): .*Josh.*’) # Our regex
    string = u»Eli: Josh go move your laundry» # Our string

    matches = re.match(pattern, string) # Test the string

    who = matches.group(1) # Get who said the message
    print(who) # «Eli»
    [/python]

    Обратите внимание: мы использовали
    .group(1) так же, как ранее использовали \1
    в шаблоне регулярного выражения. Здесь
    нет ничего нового за исключением того,
    что это использование regex именно в
    Python.(Джо)+ш$/.

    Перечисление символов

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

    Перечисления символов позволяют
    определить набор возможных значений
    для группы. В случае с нашим сандвичем
    синтаксис будет такой: (пшеничный|ржаной).
    Вертикальной чертой разделяются два
    допустимых варианта. Это означает, что
    и «пшеничный», и «ржаной» будет приемлемым
    совпадением.

    Для перечисления вариантов можно
    также использовать квадратные [скобки].
    Здесь возможным вариантом будет каждый
    из символов «с», «к», «о», «б», «к», «и»
    по отдельности. Это может быть удобным
    для более сложных группировок символов,
    поскольку позволяет заменить какой-нибудь
    символ более сложным выражением внутри
    группы символов.

    Модификаторы (флаги)

    До сих пор мы говорили о шаблоне внутри
    /слэшей/, верно? Но что располагается за
    их пределами?

    Слева – ничего интересного. и $
    обозначают начало и конец каждой
    отдельной строки, а не только всего
    текста. i insensitive – «нечувствительность» Игнорирование регистра [a-zA-Z]. x extended – «расширенный» Игнорируются пробелы и текст после
    # в шаблоне. X extra – «добавочный» Любой неспециальный символ после
    обратного слэша \ приводит к ошибке. s single line – «одна строка» Текст вхождения считается одной
    строкой. Шаблон «точка» включает и
    символы новой строки. u unicode Строки шаблона воспринимаются как
    UTF-16. Также заставляет управляющие
    последовательности соответствовать
    символам Юникода. Полезно для поддержки
    кириллических символов в регулярном
    выражении. U ungreedy – инвертация жадности Совпадения становятся ленивыми по
    умолчанию. Теперь знак вопроса после
    квантификатора делает его жадным. A anchored – «закрепленный» Шаблон привязывается к началу строки. J duplicate – «дубликат» Разрешает одинаковые имена для
    подшаблонов.

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

    Возможно, Эли была настолько злая, что
    решила поспамить в чате с помощью
    СМеШЕНия реГисТрОВ. Не стоит бояться,
    у нас же есть i! Мы можем найти вхождение
    строки «Я нЕеенавижу ЖиТь С ДЖОШем!!» с
    помощью регулярного выражения /я
    не+навижу жить с джошем!+/i. Теперь это
    будет понятнее и полезнее. Прекрасно!

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

    Что дальше?

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

    В регулярных выражениях используется
    множество символов / токенов. Скорее
    всего вы будете натыкаться на них на
    Stack Overflow. Иногда их значение можно
    угадать, исходя из своего предыдущего
    опыта (например, \n это символ новой
    строки). Но в любом случае, остается еще
    много для изучения.

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

    А если все написанное здесь для вас легкотня, обратите внимание на regex-кроссворды. Уж они заставят вас мыслить регулярными выражениями!

    Простые способы применения RegEx для начинающих

    Перевод статьи
    «Simple RegEx tricks for beginners».

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

    Настройка редактора кода

    Регулярные выражения в настоящее время поддерживаются практически всеми редакторами, вы можете выбирать любой. Я при написании этой статьи пользовался Visual Studio Code. Учтите, что обычно нужно еще включить RegEx где-то возле окна поиска. Вот, например, включение RegEx в VS Code:

    Включение RegEx

    1. Точка представляет любой
    символ (причем один)

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

    b.t

    Регулярное выражение, указанное выше,
    совпадает с «bot», «bat» и любыми другими
    словами из трех букв, начинающимися на
    «b» и заканчивающимися на «t». Но если в
    искомом слове должен быть сам символ
    точки, в регулярном выражении его нужно
    экранировать при помощи обратной косой
    черты \. Это регулярное выражение совпадет
    с «b.t»:

    b\.t

    Экранирование точки

    2. Точка со звездочкой могут
    представлять любые символы в любом
    количестве

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

    loadScript(scriptName: string, pathToFile: string)

    И мы хотим найти все вызовы этого
    метода, где pathToFile указывает на любой
    файл в папке «lua». Для этого можно
    использовать следующее регулярное
    выражение:

    loadScript.*lua

    Расшифровывается это так: «Найди
    совпадение с любым текстом, начинающимся
    с «loadScript» и заканчивающимся на «lua»,
    причем между указанными началом и концом
    может идти что угодно».

    3. Вопросительный знак — «не
    жадное» совпадение

    Вопросительный знак, стоящий после
    .* (точки со звездочкой) и некоторых
    других последовательностей RegEx, означает
    «найди как можно меньшее совпадение».

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

    Но если вам нужно, чтобы регулярное
    выражение совпадало со строками только
    в части, заканчивающейся первым вхождением
    «lua», написать его можно так:

    loadScript.*?lua

    Это регулярное выражение означает:
    «Найди совпадение с любой строкой,
    начинающейся с «loadScript» и заканчивающейся
    первым вхождением «lua», а между началом
    и концом могут быть любые другие символы».

    4. Группирование символов

    Окей, теперь мы можем искать совпадения.
    Но что, если нам нужно не только найти,
    но и изменить части найденного текста?
    Здесь нам пригодится группирование
    символов.

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

    loadScript(scriptName, id, pathToFile)

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

    loadScript(.*?,.*?)

    Это результат запуска следующего
    регулярного выражения:

    loadScript\(.*?,.*?\)

    Расшифровывается оно так: «Найди любую
    строку, начинающуюся с текста «loadScript(»,
    за которым идут любые другие символы
    до первого вхождения символа запятой,
    после чего идет что угодно до первого
    вхождения закрывающей скобки».

    Единственное, что здесь может выглядеть
    странно, это обратные слэши (\) — они
    служат для экранирования скобок.

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

    В предыдущем регулярном выражении вы
    определили два аргумента нашего вызова
    метода при помощи сочетания символов
    .*?. Давайте сделаем каждый из наших
    аргументов отдельной группой, для этого
    окружим каждое сочетание скобками:

    loadScript\((.*?),(.*?)\)

    Если вы запустите это регулярное
    выражение, вы не заметите никаких
    изменений. Это потому, что выражение
    соответствует тому же тексту. Но теперь
    мы можем обращаться к этим аргументам,
    используя обратные ссылки $1 и $2.
    Таким образом мы сможем добавить еще
    один аргумент в середину вызова.

    В окне поиска вводим

    loadScript\((.*?),(.*?)\)

    Это такой же поиск, как и с предыдущим
    выражением, только аргументы представлены
    в виде групп 1 и 2.

    В окне замены вводим

    loadScript($1,id,$2)

    Это означает «Замени найденный текст
    текстом «loadScript(», за которым идет группа
    1, «id», группа 2 и закрывающая скобка».

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

    Результат замены

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

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

    Таким образом, если указан класс [0-9]
    это может быть любая цифра от 0 до 9. Можно
    перечислить их явно — [0123456789], смысл при
    этом не меняется. Буквы тоже можно
    перечислять, а можно указывать при
    помощи дефиса, например, [a-z] это любая
    буква латинского алфавита в нижнем
    регистре, [A-Z] — в верхнем регистре,
    [a-zA-Z] — вообще любая буква латинского
    алфавита.

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

    expect.*to.equal\([0–9]*\)

    Послесловие

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

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

    Руководство C# | Регулярные выражения

    82

    C# — Руководство по C# — Регулярные выражения

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

    Это не новая технология, изначально она появилась в среде UNIX и обычно используется в языке программирования Perl. Разработчики из Microsoft перенесли ее в Windows, где до недавнего времени эта технология применялась в основном со сценарными языками. Однако теперь регулярные выражения поддерживаются множеством классов .NET из пространства имен System.Text.RegularExpressions. Случаи применения регулярных выражений можно встретить во многих частях среды .NET Framework. В частности, вы найдете их в серверных элементах управления проверкой ASP.NET.

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

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

    1. Набор управляющих кодов для идентификации специфических типов символов

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

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

    • Идентифицировать (и возможно, помечать к удалению) все повторяющиеся слова в строке

    • Сделать заглавными первые буквы всех слов

    • Преобразовать первые буквы всех слов длиннее трех символов в заглавные

    • Обеспечить правильную капитализацию предложений

    • Выделить различные элементы в URI (например, имея http://www.professorweb.ru, выделить протокол, имя компьютера, имя файла и т.д.)

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

    В следующей таблице специальные метасимволы регулярных выражений C# сгруппированы по смыслу:






    Метасимволы, используемые в регулярных выражениях C#
    СимволЗначениеПримерСоответствует
    Классы символов
    […]Любой из символов, указанных в скобках[a-z]В исходной строке может быть любой символ английского алфавита в нижнем регистре
    [^.0-9]В исходной строке может быть любой символ кроме цифр
    .Любой символ, кроме перевода строки или другого разделителя Unicode-строки


    \wЛюбой текстовый символ, не являющийся пробелом, символом табуляции и т.п.


    \WЛюбой символ, не являющийся текстовым символом


    \sЛюбой пробельный символ из набора Unicode


    \SЛюбой непробельный символ из набора Unicode. Обратите внимание, что символы \w и \S — это не одно и то же


    \dЛюбые ASCII-цифры. Эквивалентно [0-9]


    \DЛюбой символ, отличный от ASCII-цифр. Эквивалентно [^0-9]


    Символы повторения
    {n,m}Соответствует предшествующему шаблону, повторенному не менее n и не более m разs{2,4}«Press», «ssl», «progressss»

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

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

    Примечание

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

    Таблица 16.1. Регулярные выражения — Модификаторы

    Выражение… соответствует
    (?i)Включает поиск совпадений независимо от регистра символов (по умолчанию все шаблоны чувствительны к регистру)

    Таблица 16.2. Регулярные выражения — Символы

    Выражение… соответствует
    xСимвол «x», за исключением следующих случаев…
    \uhhhhСимвол с шестнадцатеричным значением 0xhhhh
    \tСимвол табуляции («\u0009»)
    \nСимвол новой строки («\u000A»)
    \rСимвол возврата каретки («\u000D»)
    \fСимвол конца страницы (команда подачи страницы для принтера) («\u000C»)
    \aСимвол звонка (оповещения) («\u0007»)
    \eСимвол Escape («\u001B»)
    \cxУправляющий символ, соответствующий «x»
    \0nСимвол с восьмеричным значением 0n (0 ≤ n ≤ 7)
    \0nnСимвол с восьмеричным значением 0nn (0 ≤ n ≤ 7)
    \0mnnСимвол с восьмеричным значением 0mnn (0 ≤ m ≤ 3, 0 ≤ n ≤ 7)
    \xhhСимвол с шестнадцатеричным значением 0xhh

    Таблица 16.{|}
    в качестве их буквальных значений.\\Например, это будет обратная косая черта.\Qне соответствует ничему, только экранирует все символы вплоть до \E\Eне соответствует ничему, только прекращает экранирование, начатое \Q

    Таблица 16.4. Регулярные выражения — Классы блоков и категорий Юникода

    Выражение… соответствует
    \p{InGreek}Символ из греческого блока (простой блок)
    \p{Lu}Прописная буква (см.abc]Любой символ кроме a, b, или c (исключение)
    [a-zA-Z]Любые символы латинского алфавита, от a до z и от A до Z включительно

    Таблица 16.6. Регулярные выражения — Предустановленные наборы символов

    Выражение… соответствует
    .Любой символ (кроме символов конца строки)
    \dЦифра: [0-9]
    \DНе цифра: [^0-9]
    \sЛюбой пробельный символ: [ \t\n\x0B\f\r]
    \SЛюбой не пробельный символ: [^\s]
    \wЛюбой буквенный или цифровой символ, а также знак подчёркивания: [a-zA-Z_0-9]
    \WЛюбой символ кроме буквенного и цифрового, а также знака подчёркивания: [^\w]

    Таблица 16.Начало строки$Конец строки\bГраница слова\BНе граница слова

    Таблица 16.8. Регулярные выражения — Жадные кванторы

    Выражение… соответствует
    X?X, один раз или ни разу
    X*X, ноль или более раз
    X+X, один или более раз

    Примечание

    жадные кванторы будут искать как можно больше совпадений. Например, a+ для последовательности aaabbb выдаст «ааа».

    Таблица 16.9. Регулярные выражения — Ленивые кванторы

    Выражение… соответствует
    X??X, один раз или ни разу
    X*?X, ноль или более раз
    X+?X, один или более раз

    Примечание

    ленивые кванторы будут искать как можно меньше совпадений. Например, a+? для последовательности aaabbb выдаст только a.

    Таблица 16.10. Регулярные выражения — Логические операторы

    Выражение… соответствует
    XYX, за которым идёт Y
    X|YЛибо X, либо Y
    (XY)XY как отдельная группа

    1. Инструменты для работы с регулярными выражениями и примеры использования

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

    Рисунок 16.1. Regex Tester

    Программа The Regex Coach для Windows, GNU/Linux и FreeBSD. Работает по описанному выше принципу.

    Большое количество полезных примеров регулярных выражений можно найти и в самой ОмегаТ (смотри «Параметры» > «Сегментация»). В списке ниже приведены регулярные выражения, которые могут оказаться полезными при
    поиске по памяти перевода:

    Таблица 16.11. Регулярные выражения — Примеры использования регулярных выражений при поиске по переводам

    Регулярное выражениеРезультат поиска:
    (\b\w+\b)\s\1\bслова, написанные дважды
    [\.aeiou]для английского языка: проверка подобная предыдущей, но на слова, начинающиеся с согласных («a», а не «an»)
    \s{2,}больше, чем один пробел подряд
    \.[A-Z]Точка, за которой следует прописная буква, возможно, перед началом нового предложения пропущен пробел?
    \bis\bпоиск «is», но не «this» или «isn’t» и т. д.

    Регулярные выражения Ссылка: Классы символов

    JGsoft.NETJavaPerlPCREPCRE2PHPDelphiRJavaScriptVBScriptXRegExpPythonRubystd :: regexBoostTcl AREPOSIX BREPOSIX EREGNU BREGNU EREOracleXMLXPathJGsoft.NETJavaPerlPCREPCRE2PHPDelphiRJavaScriptVBScriptXRegExpPythonRubystd :: regexBoostTcl AREPOSIX BREPOSIX EREGNU BREGNU EREOracleXMLXPath

    Синтаксис

    Характеристика Синтаксис Описание Пример JGsoft.NET Java Perl PCRE PCRE2 PHP Delphi R JavaScript VBScript XRegExp Python Рубин std :: регулярное выражение Повышение Tcl ARE POSIX BRE POSIX ERE GNU BRE GNU ERE Оракул XML XPath
    Класс символов [ При использовании вне символьного класса [начинает символьный класс.Внутри класса персонажей применяются разные правила. Если не указано иное, синтаксис на этой странице действителен только внутри классов символов, тогда как синтаксис на всех других справочных страницах недействителен внутри классов символов. ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА
    Буквенный символ Любой символ, кроме ^ -] \ Все символы, кроме перечисленных специальных символов, являются буквальными символами, которые добавляются к классу символов. -] \ Обратная косая черта экранирует специальные символы, чтобы скрыть их особое значение.или] ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ECMA ECMA 902

    ДА нет нет нет нет нет ДА ДА
    Буквальная обратная косая черта \ Обратная косая черта — это буквальный символ, который добавляет обратную косую черту к классу символов. [\] соответствует \ нет нет нет нет нет нет нет нет нет нет нет нет нет нет базовый
    расширенный
    grep
    egrep
    awk
    базовый
    расширенный
    grep
    egrep
    нет ДА ДА ДА ДА ДА нет нет
    Диапазон — (дефис) между двумя токенами, каждый из которых определяет один символ. (каретка) сразу после открытия [ Отменяет класс символа, заставляя его соответствовать одному символу , а не , перечисленному в классе символов.a-d] соответствует x (любой символ, кроме a, b, c или d) ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА
    Буквальный открывающийся кронштейн [ Открывающая квадратная скобка — это буквальный символ, который добавляет открывающую квадратную скобку к классу символов. [ab [cd] ef] соответствует aef], bef], [ef], cef] и def] ДА ДА нет ДА ДА ДА ДА ДА ДА ДА ДА ДА 2,4–3,6 нет ДА ДА ДА ДА ДА ДА ДА ДА нет нет
    Вложенный класс символов [ Открывающая квадратная скобка внутри класса символов начинает вложенный класс символов. [ab [cd] ef] совпадает с [abcdef] и соответствует любой букве между a и f. нет нет ДА нет нет нет нет нет нет нет нет нет нет 1,9 нет нет нет нет нет нет нет нет нет нет
    Вычитание класса символов [основание- [вычитание]] Удаляет все символы в классе «вычитание» из «базового» класса. [a-z- [aeiuo]] соответствует одной букве, которая не является гласной. ДА 2,0–4,8 нет нет нет нет нет нет нет нет нет нет нет нет нет нет нет нет нет нет нет нет ДА ДА
    Пересечение классов символов [основание && [пересечение]] Уменьшает класс символа до символов, присутствующих как в «базовом», так и в «пересечении».aeiuo]] соответствует одной букве, которая не является гласной. V2 нет ДА нет нет нет нет нет нет нет нет нет нет 1,9 нет нет нет нет нет нет нет нет нет нет
    Пересечение классов символов [основание && пересечение] Уменьшает класс символа до символов, присутствующих как в «базовом», так и в «пересечении». [\ p {Nd} && \ p {InThai}] соответствует одной тайской цифре. нет нет ДА нет нет нет нет нет нет нет нет нет нет 1,9 нет нет нет нет нет нет нет нет нет нет
    Преобразование символа \ n, \ r и \ t Добавить символ LF, символ CR или символ табуляции к классу символов соответственно. [\ n \ r \ t] перевод строки, возврат каретки или табуляция. ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ECMA
    awk

    8 awk

    ДА строка строка строка строка нет ДА ДА
    Преобразование символа \ а Добавьте управляющий символ «предупреждение» или «звонок» (ASCII 0x07) в класс символов. [\ a \ t] соответствует символу колокольчика или табуляции. ДА ДА ДА ДА ДА ДА ДА ДА ДА нет нет нет ДА ДА awk ECMA
    awk

    ДА нет нет нет нет нет нет нет
    Преобразование символа \ б Добавьте управляющий символ «backspace» (ASCII 0x08) в класс символов. [\ b \ t] соответствует символу возврата или табуляции. ДА ДА нет ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ECMA VC’12 – VC ‘ 15
    awk VC’08 – VC’19
    ECMA
    awk
    ДА нет нет нет нет нет ДА ДА
    Преобразование символов \ B Добавьте обратную косую черту к классу символов. [\ B] соответствует \ нет нет нет нет нет нет нет нет нет нет нет нет нет нет нет нет ДА нет нет нет нет нет нет нет
    Преобразование символа \ e Добавьте управляющий символ «escape» (ASCII 0x1B) к классу символов. [\ e \ t] соответствует escape-символу или символу табуляции. ДА ДА ДА ДА ДА ДА ДА ДА ДА нет нет нет нет ДА нет ECMA
    awk
    ДА нет нет нет нет нет нет нет
    Преобразование символа \ f Добавьте управляющий символ «подачи страницы» (ASCII 0x0C) в класс символов. [\ f \ t] соответствует переводу страницы или символу табуляции. ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ДА ECMA
    awk 9002

    awk ДА нет нет нет нет нет нет нет
    Преобразование символов \ в Добавьте управляющий символ «вертикальной табуляции» (ASCII 0x0B) в класс символов без добавления каких-либо других вертикальных пробелов. [\ v \ t] соответствует вертикальной табуляции или символу табуляции. V1 только ДА 4–7 нет нет нет нет нет нет ДА ДА ДА ДА ДА ECMA
    awk
    ECMA
    awk
    ДА нет нет нет нет нет нет нет
    POSIX класс [: alpha:] Соответствует одному символу из символьного класса POSIX.Может использоваться только в выражении в квадратных скобках. [[: digit:] [: lower:]] соответствует одному из значений от 0 до 9 или от a до z ASCII нет нет Unicode ASCII ASCII 5.3.4 Unicode
    5.0.0 кодовая страница
    ASCII ASCII нет нет нет нет 1,9 Unicode
    1. альфа:]
    Соответствует одному символу, который не является частью определенного класса символов POSIX.digit:]] соответствует цифре 5 или любому другому символу, кроме цифры. нет нет нет ДА ДА ДА ДА ДА ДА нет нет нет 3.7 ошибка 1.9 ошибка ДА ошибка ошибка ошибка ошибка ошибка ошибка нет нет
    сокращенный класс POSIX [: d:], [: s:], [: w:] Соответствует одному символу из классов символов POSIX «цифра», «пробел» или «слово».Может использоваться только в выражении в квадратных скобках. [[: s:] [: d:]] соответствует пробелу, табуляции, разрыву строки или одному из значений от 0 до 9 V2 ASCII нет нет нет нет нет нет нет нет нет нет нет нет нет Unicode Unicode нет нет нет нет нет нет нет нет
    сокращенный класс POSIX [: l:] и [: u:] Соответствует одному символу из классов символов POSIX «нижний» или «верхний».Может использоваться только в выражении в квадратных скобках. [[: u:]] [[: l:]] соответствует Aa, но не соответствует aA. V2 ASCII нет нет нет нет нет нет нет нет нет нет нет нет нет нет Unicode нет нет нет нет нет нет нет нет
    сокращенный класс POSIX [: h:] Соответствует одному символу из класса символов POSIX «blank».Может использоваться только в выражении в квадратных скобках. [[: h:]] соответствует пробелу. V2 ASCII нет нет нет нет нет нет нет нет нет нет нет нет нет нет 1,42–1,73
    Unicode
    нет нет нет нет нет нет нет нет
    POSIX сокращенный класс [: V:] Соответствует вертикальному пробельному символу.Может использоваться только в выражении в квадратных скобках. [[: v:]] соответствует любому одиночному вертикальному символу пробела. V2 ASCII нет нет нет нет нет нет нет нет нет нет нет нет нет нет 1,42–1,73
    Unicode
    нет нет нет нет нет нет нет нет
    POSIX класс Любой поддерживаемый синтаксис \ p {…} \ p {…} может использоваться внутри классов символов. [\ p {Digit} \ p {Lower}] соответствует одному из значений от 0 до 9 или от z до z ДА нет 9 ДА нет нет нет нет нет нет нет н / д н / д 1,9 н / д расширенный
    egrep
    н / д н / д н / д н / д н / д н / д a нет нет
    POSIX класс \ p {Alpha} Соответствует одному символу из символьного класса POSIX. \ p {Digit} соответствует любой отдельной цифре. Unicode нет ASCII Unicode нет нет нет нет нет нет нет нет нет 1.9 Unicode нет ECMA
    расширенный
    egrep
    awk
    Unicode
    нет нет нет нет нет нет нет нет
    POSIX класс \ p {IsAlpha} Соответствует одному символу из символьного класса POSIX. \ p {IsDigit} соответствует любой отдельной цифре. Unicode нет 9 Unicode
    4 ASCII
    Unicode нет нет нет нет нет нет нет нет нет нет нет нет нет нет нет нет нет нет нет нет
    POSIX последовательность сортировки [.пролет-II.] Соответствует последовательности сортировки POSIX. Может использоваться только в выражении в квадратных скобках. [[.span-ll.]] Соответствует ll в испанском языковом стандарте ошибка нет нет ошибка ошибка ошибка ошибка ошибка ошибка нет нет нет 3.7 ошибка только 1.8 ошибка ошибка ДА ДА ДА ДА ДА ДА ДА нет нет
    Эквивалентность символов POSIX [= x =] Соответствует эквиваленту символов POSIX.Может использоваться только в выражении в квадратных скобках. [[= e =]] соответствует e, é, è и ê во французском языке ошибка нет нет ошибка ошибка ошибка ошибка ошибка ошибка нет нет нет 3.7 ошибка только 1.8 ошибка ДА ДА ДА ДА ДА ДА ДА ДА нет нет
    Функция Синтаксис Описание Пример JGsoft.NET Java Perl PCRE PCRE2 PHP Delphi R JavaScript VBScript XRegExp Python Рубин std :: регулярное выражение Повышение Tcl ARE POSIX BRE POSIX ERE GNU BRE GNU ERE Оракул XML XPath

    Учебное пособие по регулярным выражениям — буквальные и специальные символы

    Самое простое регулярное выражение состоит из одного буквального символа, такого как.Он соответствует первому появлению этого символа в строке. Если строка Jack is a boy, она соответствует a после J. Тот факт, что a находится в середине слова, не имеет значения для механизма регулярных выражений. Если это важно для вас, вам нужно будет сообщить об этом механизму регулярных выражений, используя границы слов. Мы вернемся к этому позже.

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

    Точно так же регулярное выражение cat соответствует cat в разделе «О кошках и собаках». Это регулярное выражение состоит из трех буквальных символов. Это как сказать механизму регулярных выражений: найдите c, за которым сразу следует a, за которым сразу следует t.

    Обратите внимание, что движки регулярных выражений по умолчанию чувствительны к регистру. cat не соответствует Cat, если вы не укажете механизму регулярных выражений игнорировать различия в регистре., знак доллара $, точка или точка, вертикальная черта или вертикальная черта |, вопросительный знак?, звездочка или звездочка *, знак плюс +, открывающая скобка (, закрывающая скобка), открывающая квадратная скобка [и открывающая фигурная скобка {, Эти специальные символы часто называют «метасимволами». Большинство из них являются ошибками при использовании в одиночку.

    Если вы хотите использовать любой из этих символов в качестве литерала в регулярном выражении, вам нужно экранировать их обратной косой чертой. Если вы хотите сопоставить 1 + 1 = 2, правильное регулярное выражение — 1 \ + 1 = 2.В противном случае знак плюса имеет особое значение.

    Обратите внимание, что 1 + 1 = 2 без обратной косой черты является допустимым регулярным выражением. Таким образом, вы не получите сообщение об ошибке. Но это не соответствует 1 + 1 = 2. Он будет соответствовать 111 = 2 в 123 + 111 = 234 из-за особого значения символа плюса.

    Если вы забыли экранировать специальный символ там, где его использование не разрешено, например, в +1, вы получите сообщение об ошибке.

    Большинство разновидностей регулярных выражений рассматривают фигурную скобку {как буквальный символ, если только она не является частью оператора повторения, например {1,3}.Таким образом, вам обычно не нужно экранировать его с помощью обратной косой черты, хотя вы можете это сделать, если хотите. Но есть несколько исключений. Java требует экранирования буквальных открывающих скобок. Boost и std :: regex требуют экранирования всех буквальных скобок.

    ] — это литерал вне классов символов. Внутри классов персонажей применяются разные правила. Это обсуждается в теме о классах персонажей. Опять же, есть исключения. std :: regex и Ruby требуют экранирования закрывающих квадратных скобок даже вне классов символов.

    Все остальные символы не должны экранироваться обратной косой чертой. Это потому, что обратная косая черта также является специальным символом. Обратная косая черта в сочетании с буквальным символом может создать токен регулярного выражения со специальным значением. Например. \ d — это сокращение, которое соответствует одной цифре от 0 до 9.

    Экранирование одного метасимвола обратной косой чертой работает во всех разновидностях регулярных выражений. Некоторые разновидности также поддерживают escape-последовательность \ Q… \ E. Все символы между \ Q и \ E интерпретируются как буквальные символы.Например. \ Q * \ d + * \ E соответствует буквальному тексту * \ d + *. \ E можно опустить в конце регулярного выражения, поэтому \ Q * \ d + * совпадает с \ Q * \ d + * \ E. Этот синтаксис поддерживается механизмом JGsoft, Perl, PCRE, PHP, Delphi, Java как внутри, так и за пределами классов символов. Однако в Java 4 и 5 есть ошибки, из-за которых \ Q… \ E ведет себя неправильно, поэтому вам не следует использовать этот синтаксис с Java. Boost поддерживает его вне классов символов, но не внутри.

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

    • 10 минут на чтение

    В этой статье

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

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

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

    Персонаж сбегает

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

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

    \ c x

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

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

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

    Класс символов Описание Образец Матчи
    [ группа_знаков ] Соответствует любому одиночному символу в character_group .aei] "r" , "g" , "n" в "царствование"
    [ первая - последняя ] Диапазон символов: соответствует любому одиночному символу в диапазоне от первых до последних . [А-Я] "A" , "B" в "AB123"
    . Подстановочный знак: соответствует любому одиночному символу, кроме \ n.

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

    а.е. "пр." в "нефе"

    "съел" в "вода"

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

    \ p {IsCyrillic}

    «C» , «L» в «City Lights»

    «Д» , «Ж» в «ДЖem»

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

    \ P {IsCyrillic}

    «i» , «t» , «y» в «Город»

    «e» , «m» в «ДЖem»

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

    Анкеры

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

    Группирующие конструкции

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

    4 )

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

    «Запись» в «Console.Write (значение)»

    (? Imnsx-imnsx: подвыражение ) Применяет или отключает указанные параметры в подвыражении .Для получения дополнительной информации см. Параметры регулярного выражения. A \ d {2} (? I: \ w +) \ b "A12xl" , "A12XL" дюйм "A12xl A12XL a12xl"
    (? = подвыражение ) Утверждение положительного просмотра вперед нулевой ширины. \ ш + (? = \.) "это" , "побежал" , и "вышел" в "Он есть. Собака побежала. Солнце вышло."
    (?! подвыражение ) Утверждение отрицательного просмотра вперед нулевой ширины. \ b (?! Un) \ w + \ b "уверен" , "использован" в "не уверен, что используется единство"
    (? <= подвыражение ) Утверждение положительного просмотра назад нулевой ширины. (? <= 19) \ d {2} \ b "99" , "50" , "05" в "1851 1999 1950 1905 2003"
    (? подвыражение ) Утверждение отрицательного просмотра назад нулевой ширины. (? "51" , "03" в "1851 1999 1950 1905 2003"
    (?> подвыражение ) Атомная группа. [13579] (?> A + B +) "1ABB" , "3ABB" и "5AB" в "1ABB 3ABBC 5AB 5AC"

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

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

    "

    "

    Квантификатор Описание Образец Матчи
    * Соответствует предыдущему элементу ноль или более раз. \ д * \. \ Д ".0" , "19.9" , "219.9"
    + Один или несколько раз соответствует предыдущему элементу. "be +" "пчела" в "была" , "была" в "изогнута"
    ? Соответствует предыдущему элементу ноль или один раз. "рай? Н" «побежал» , «дождь»
    { n } Точно соответствует предыдущему элементу n раз. ", \ d {3}" ", 043" в "1043.6 ", ", 876 ", ", 543 ", и ", 210 " в " 9 876 543 210 "
    { n ,} Соответствует предыдущему элементу не менее n раз. "\ d {2,}" "166" , "29" , "1930"
    { n , m } Соответствует предыдущему элементу не менее n раз, но не более m раз. "\ d {3,5}" "166" , "17668"

    "19302" в "1

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

    "193" , "024" в "1

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

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

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

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

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

    Чередование конструкции Описание Образец Матчи
    | Соответствует любому элементу, разделенному вертикальной чертой ( | ). -е (e | is | at) ", " это " в " это день ".
    (? ( выражение ) да | нет ) Соответствует да , если соответствует шаблон регулярного выражения, обозначенный выражением ; в противном случае соответствует необязательной части . Выражение интерпретируется как утверждение нулевой ширины. (? (A) A \ d {2} \ b | \ b \ d {3} \ b) "A10" , "910" дюйм "A10 C103 910"
    (? ( название ) да | нет ) Соответствует да , если имя , именованная или пронумерованная группа захвата, имеет совпадение; в противном случае соответствует необязательному . (? <Кавычки> ")? (? (Цитируется).+? "| \ S + \ s) "Dogs.jpg" , "\" Yiska plays.jpg \ "" в "Dogs.jpg \" Yiska plays.jpg \ ""

    Замены

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

    Знак Описание Образец Схема замены Входная строка Строка результата
    $ номер Заменяет подстроку, соответствующую номеру группы . \ b (\ w +) (\ s) (\ w +) \ b 3 доллара 2 доллара 1 "один два" "два один"
    $ { название } Заменяет подстроку, соответствующую названной группе name . \ b (? \ w +) (\ s) (? \ w +) \ b $ {word2} $ {word1} "один два" "два один"
    $$ Заменяет буквальный символ "$". \ b (\ d +) \ s? долларов США $$$ 1 «103 долл. США» "103 доллара"
    $ и Заменяет копию всего матча. \ $? \ D * \.? \ D + ** $ и ** "1,30 $" "** 1,30 доллара США **"
    $ Заменяет весь текст входной строки перед совпадением. В + $ "AABBCC" "AAAACC"
    $ Заменяет весь текст входной строки после совпадения. В + $ "AABBCC" "AACCCC"
    $ + Заменяет последнюю захваченную группу. В + (К +) $ + "AABBCCDD" "AACCDD"
    $ _ Заменяет всю входную строку. В + $ _ "AABBCC" "AAAABBCCCC"

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

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

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

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

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

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

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

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

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

    См. Также

    Предопределенные классы символов (Руководства по Java ™> Основные классы> Регулярные выражения)

    Учебники по Java были написаны для JDK 8.Примеры и методы, описанные на этой странице, не используют улучшений, представленных в более поздних версиях, и могут использовать технологии, которые больше не доступны.
    См. В разделе «Изменения языка Java» сводку обновленных языковых функций в Java SE 9 и последующих выпусках.
    См. Примечания к выпуску JDK для получения информации о новых функциях, улучшениях и удаленных или устаревших параметрах для всех выпусков JDK.

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

    Построить Описание
    .\ w]

    В приведенной выше таблице каждая конструкция в левом столбце является сокращением для класса символов в правом столбце. Например, \ d означает диапазон цифр (0–9), а \ w означает символ слова (любая строчная буква, любая прописная буква, символ подчеркивания или любая цифра). По возможности используйте предопределенные классы. Они облегчают чтение кода и устраняют ошибки, вызванные искаженными классами символов.

    Конструкции, начинающиеся с обратной косой черты, называются экранированными конструкциями .Мы предварительно просмотрели экранированные конструкции в
    Раздел String Literals, где мы упомянули использование обратной косой черты и \ Q и \ E для цитаты. Если вы используете экранированную конструкцию внутри строкового литерала, вы должны поставить перед обратной косой чертой другую обратную косую черту для компиляции строки. Например:

    закрытая конечная строка REGEX = "\\ d"; // одна цифра
     

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

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

    Введите свое регулярное выражение:.
    Введите строку ввода для поиска: @
    Я нашел текст «@», начинающийся с индекса 0 и заканчивающийся индексом 1.
    
    Введите свое регулярное выражение:.
    Введите строку ввода для поиска: 1
    Я нашел текст «1», начинающийся с индекса 0 и заканчивающийся индексом 1.
    
    Введите свое регулярное выражение:.
    Введите строку ввода для поиска: a
    Я нашел текст «а», начинающийся с индекса 0 и заканчивающийся индексом 1.Введите ваше регулярное выражение: \ d
    Введите строку ввода для поиска: 1
    Я нашел текст «1», начинающийся с индекса 0 и заканчивающийся индексом 1.
    
    Введите ваше регулярное выражение: \ d
    Введите строку ввода для поиска: a
    Соответствий не найдено.
    
    Введите ваше регулярное выражение: \ D
    Введите строку ввода для поиска: 1
    Соответствий не найдено.
    
    Введите ваше регулярное выражение: \ D
    Введите строку ввода для поиска: a
    Я нашел текст «а», начинающийся с индекса 0 и заканчивающийся индексом 1.
    
    Введите ваше регулярное выражение: \ s
    Введите строку ввода для поиска:
    Я нашел текст "", начинающийся с индекса 0 и заканчивающийся индексом 1.
    
    Введите ваше регулярное выражение: \ s
    Введите строку ввода для поиска: a
    Соответствий не найдено.Введите ваше регулярное выражение: \ S
    Введите строку ввода для поиска:
    Соответствий не найдено.
    
    Введите ваше регулярное выражение: \ S
    Введите строку ввода для поиска: a
    Я нашел текст «а», начинающийся с индекса 0 и заканчивающийся индексом 1.
    
    Введите ваше регулярное выражение: \ w
    Введите строку ввода для поиска: a
    Я нашел текст «а», начинающийся с индекса 0 и заканчивающийся индексом 1.
    
    Введите ваше регулярное выражение: \ w
    Введите строку ввода для поиска:!
    Соответствий не найдено.
    
    Введите ваше регулярное выражение: \ W
    Введите строку ввода для поиска: a
    Соответствий не найдено.
    
    Введите ваше регулярное выражение: \ W
    Введите строку ввода для поиска:!
    Я нашел текст "!" начиная с индекса 0 и заканчивая индексом 1.

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

    • \ d соответствует всем цифрам
    • \ s соответствует пробелам
    • \ w соответствует символам слова

    В качестве альтернативы заглавная буква означает обратное:

    • \ D соответствует нецифровому
    • \ S соответствует не пробелам
    • \ W соответствует символам, отличным от слов

    Основы - Учебник по регулярным выражениям

    Основы регулярных выражений!

    Начать с начала.

    Введение

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

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

    Самый простой пример

    Регулярное выражение - это описание шаблона символов.Самый простой шаблон, который мы можем описать, - это точная строка (или последовательность) символов. Так, например, я могу выполнить поиск символов th (Или, говоря более конкретно, я ищу символ t , за которым следует символ h )

    чт

    Нет теории эволюции. Только список животных, которым разрешает жить Чак Норрис.

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

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

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

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

    .

    Точка - любой символ

    Точка (.) (или точка) - это то, что мы называем метасимволом . Метасимволы - это символы, которые имеют особое значение. Они помогают нам создавать более интересные шаблоны, чем просто последовательность определенных символов. Практически все, на что мы смотрим отсюда, будет метасимволами.

    Точка (.) Представляет любой символ. Итак, с регулярным выражением ниже мы ищем символ b , за которым следует любой символ, за которым следует символ g .

    г.н.

    Большой мешок с битами был прослушан.

    Важно отметить, что расширение. соответствует только одному символу. Мы можем заставить его соответствовать более чем одному символу, используя множители, которые мы рассмотрим ниже. В качестве альтернативы вы также можете использовать несколько., Например:

    л..э

    Вы можете жить как король, но убедитесь, что это не ложь.

    В приведенном выше примере мы сопоставляем l , за которым следуют два символа, за которыми следует e .

    Диапазоны персонажей

    . позволяет нам соответствовать любому персонажу. Иногда мы хотели бы быть более конкретными. Здесь могут пригодиться диапазоны . Мы указываем диапазон символов, заключая их в квадратные скобки ([]).

    т [eo] d

    Когда сегодня закончится, у Теда будет утомительное время наводить порядок.

    В приведенном выше регулярном выражении мы ищем символ t , за которым следует символ e или o , за которым следует символ d .

    Нет ограничений на количество символов, которые вы можете разместить в квадратных скобках. Вы можете разместить один символ, например. [y] (что было бы немного глупо, но, тем не менее, законно), или у вас может быть много, например. [grf4s2 # lknx].

    Ярлык для знаков подряд

    Допустим, мы хотели найти цифру от 1 до 8. Мы могли бы использовать такой диапазон, как [12345678] , но есть ярлык, который мы можем использовать, чтобы немного упростить задачу.

    [1-8]

    Распределение комнат: G4 G9 F2 h2 L0 K7 M9

    Вы можете комбинировать набор символов вместе с другими персонажами.

    [1-49]

    Распределение комнат: G4 G9 F2 h2 L0 K7 M9

    В приведенном выше регулярном выражении мы ищем цифры 1, 2, 3, 4 или 9.

    Мы также можем комбинировать несколько наборов. В регулярном выражении ниже мы ищем 1, 2, 3, 4, 5, a, b, c, d, e, f, x.

    [1-5a-fx]

    Случайный набор символов: y, w, a, r, f, 4, 9, 6, 3, p, x, t

    Использование наборов символов иногда может приводить к странному поведению. Например, вы можете использовать диапазон [a-f] и обнаружить, что он соответствует D . Это связано с таблицами символов, которые использует система. В большинстве систем есть таблица символов, в которой сначала идут все строчные буквы, а затем прописные. например. abcdef .... xyzABCD ... Однако в некоторых системах строчные и прописные буквы чередуются.) в начале диапазона.

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

    Regular Expression HOWTO - документация Python 3.9.0

    Введение

    Регулярные выражения (называемые RE, или регулярными выражениями, или шаблонами регулярных выражений) по существу являются
    крошечный узкоспециализированный язык программирования, встроенный в Python и
    доступный через модуль re . Используя этот небольшой язык, вы указываете
    правила для набора возможных строк, которым вы хотите сопоставить; этот набор мог бы
    содержать английские предложения, или адреса электронной почты, или команды TeX, или все, что вы
    подобно.Затем вы можете задать такие вопросы, как «Соответствует ли эта строка шаблону?»,
    или «Есть ли где-нибудь в этой строке совпадение с шаблоном?». Вы также можете
    используйте RE для изменения строки или разделения ее различными способами.

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

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

    Простые выкройки

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

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

    Соответствующие символы

    Большинство букв и символов просто соответствуют друг другу.Например,
    регулярное выражение test точно соответствует строке test . (Вы можете
    включить режим без учета регистра, который позволит этому RE соответствовать Test или TEST
    также; подробнее об этом позже.