символьные классы в регулярных выражениях

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

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

Аналог Пример Описание
? a? одно или ноль вхождений «а»
+ a+ одно или более вхождений «а»
* a* ноль или более вхождений «а»

Модификаторы

Символ «минус» (-) меред модификатором (за исключением U) создаёт его отрицание.

Спецсимволы

Аналог Описание
() подмаска, вложенное выражение
[] групповой символ
количество вхождений от «a» до «b»
| логическое «или», в случае с односимвольными альтернативами используйте []
\ экранирование спец символа
. любой сивол, кроме перевода строки
\d 6 десятичная цифра
\D [^\d] любой символ, кроме десятичной цифры
\f конец (разрыв) страницы
\n перевод строки
\pL буква в кодировке UTF-8 при использовании модификатора u
\r возврат каретки
\s [ \t\v\r\n\f] пробельный символ
\S [^\s] любой символ, кроме промельного
\t табуляция
\w [0-9a-z_] любая цифра, буква или знак подчеркивания
\W [^\w] любой символ, кроме цифры, буквы или знака подчеркивания
\v вертикальная табуляция

Спецсимволы внутри символьного класса

Пример Описание
^ [^da] отрицание, любой символ кроме «d» или «a»
[a-z] интервал, любой симво от «a» до «z»

Позиция внутри строки

Якоря

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

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

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

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

POSIX

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

Утверждения

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

Итак, парсер проверяет несколько следующих символов по предложенному шаблону ( werty ). Если они найдены, то утверждение ложно, а значит символ q будет «проигнорирован», т. е. не будет соответствовать шаблону. Если же werty не найдено, то утверждение верно, и с q все в порядке. Затем продолжается поиск любых символов, кроме пробела ( [^\s]* ).

Кванторы

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

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

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

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

Экранирование в регулярных выражениях

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

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

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

Спецсимволы экранирования в регулярных выражениях

Подстановка строк

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

Группы и диапазоны

Группы и диапазоны очень-очень полезны. Вероятно, проще будет начать с диапазонов. Они позволяют указать набор подходящих символов. Например, чтобы проверить, содержит ли строка шестнадцатеричные цифры (от 0 до 9 и от A до F), следует использовать такой диапазон:

Чтобы проверить обратное, используйте отрицательный диапазон, который в нашем случае подходит под любой символ, кроме цифр от 0 до 9 и букв от A до F:

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

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

Первым параметром будет примерно такой шаблон (возможно вам понадобятся несколько дополнительных символов для этой конкретной функции):

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

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

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

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

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

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

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

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

Источник

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

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

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

Escape-знаки

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

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

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

Класс знаков Описание Шаблон Число соответствий
[ character_group ] Соответствует любому одиночному символу, входящему в character_group. По умолчанию при сопоставлении учитывается регистр. [ae] «a» в «gray»

Для сопоставления символа точки (. или \u002E ) перед ней нужно поставить дополнительную обратную косую черту ( \. ).

a.e «ave» в «nave»

«ate» в «water»

\p< имя > Соответствует любому одиночному символу в общей категории Юникода или в именованном блоке, указанном в параметре имя. \p

Привязки

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

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

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

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

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

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

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

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

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

Подстановки

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

Знак Описание Шаблон Шаблон замены Входная строка Результирующая строка
$ число Замещает часть строки, соответствующую группе число. \b(\w+)(\s)(\w+)\b $3$2$1 «one two» «two one»
$< имя > Замещает часть строки, соответствующую именованной группе имя. \b(? \w+)(\s)(? \w+)\b $ $

«one two» «two one»
$$ Подставляет литерал «$». \b(\d+)\s?USD $$$1 «103 USD» «$103»
$& Замещает копией полного соответствия. \$?\d*\.?\d+ **$&** «$1.30» «**$1.30**»
$` Замещает весь текст входной строки до соответствия. B+ $` «AABBCC» «AAAACC»
$’ Замещает весь текст входной строки после соответствия. B+ $’ «AABBCC» «AACCCC»
$+ Замещает последнюю захваченную группу. B+(C+) $+ «AABBCCDD» «AACCDD»
$_ Замещает всю входную строку. B+ $_ «AABBCC» «AAAABBCCCC»

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

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

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

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

Источник

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

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

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

Для начала давайте рассмотрим класс «цифра». Он обозначается как \d и в регулярном выражении соответствует «любой одной цифре».

Например, давайте найдём первую цифру в номере телефона:

Это был символьный класс для цифр. Есть и другие символьные классы.

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

Например, CSS\d соответствует строке CSS с цифрой после неё:

Также мы можем использовать несколько символьных классов:

Соответствие (каждому символьному классу соответствует один символ результата):

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

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

«Обратный» означает, что он соответствует всем другим символам, например:

Мы уже видели, как сделать чисто цифровой номер из строки вида +7(903)-123-45-67 : найти все цифры и соединить их.

Альтернативный, более короткий путь – найти нецифровые символы \D и удалить их из строки:

Точка – это любой символ

Или в середине регулярного выражения:

Обратите внимание, что точка означает «любой символ», но не «отсутствие символа». Там должен быть какой-либо символ, чтобы соответствовать условию поиска:

Точка как буквально любой символ, с флагом «s»

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

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

Давайте попробуем найти цифры, разделённые дефисом:

Пробел – это символ. Такой же важный, как любой другой.

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

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

Итого

Существуют следующие символьные классы:

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

Источник

Регулярные выражения (RegEx)¶

Вступление¶

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

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

Символы¶

Простые совпадения¶

Серия символов соответствует этой серии символов во входной строке.

RegEx Находит
foobar foobar

Непечатные символы (escape-коды)¶

Для представления непечатаемого символа в регулярном выражении используется \x с шестнадцатеричным кодом. Если код длиннее 2 цифр (более U+00FF), то он обрамляется в фигурные скобки.

RegEx Находит
\xAB символ с 2-значным шестнадцатеричным кодом AB
\x

символ с 1-4 значным шестнадцатеричным кодом AB20
foo\x20bar foo bar (обратите внимание на пробел в середине)

Существует ряд предопределенных escape-кодов для непечатных символов, как в языке C :

Эскейпинг¶

RegEx Находит
\t tab (HT/TAB), тоже что \x09
\n символ новой строки (LF), то же что \x0a
\r возврат каретки (CR), тоже что \x0d
\f form feed (FF), то же что \x0c
\a звонок (BEL), тоже что \x07
\e escape (ESC), то же что \x1b
\cA … \cZ
RegEx Находит
\^FooBarPtr ^FooBarPtr здесь ^ не означает начало строки
\[a\] [a] это не класс символов

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

Пользовательские классы¶

Если вы хотите буквально использовать символ ] поместите его в начало списка или escape обратной косой чертой.

Метаклассы¶

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

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

Таким образом, вы можете переопределить эти классы.

Разделители¶

Разделители строк¶

RegEx Находит
\w буквенно-цифровой символ (включая _ )
\W не буквенно-цифровой
\d числовой символ (тоже, что 6 )
\D нечисловой
\s любой пробел (такой же как [\t\n\r\f] )
\S не пробел
\h
Метасимвол Находит
. любой символ в строке, может включать разделители строк
^ совпадение нулевой длины в начале строки
$ совпадение нулевой длины в конце строки
\A совпадение нулевой длины в начале строки
\z совпадение нулевой длины в конце строки
\Z похож на \z но совпадает перед разделителем строки, а не сразу после него, как \z

Обратите внимание, что в последовательности \x0D\x0A нет пустой строки.

Многострочная обработка может быть настроена с помощью свойств LineSeparators и LinePairedSeparator.

Таким образом, вы можете использовать разделители стиля Unix \n или стиль DOS / Windows \r\n или смешивать их вместе (как описано выше по умолчанию).

Если вы предпочитаете математически правильное описание, вы можете найти его на сайте www.unicode.org.

Разделители слов¶

RegEx Находит
\b разделитель слов
\B разделитель с не-словом

Повторы¶

Повтор¶

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

То есть цифры в фигурных скобках определяются минимальное n и максимальное m количество повторов (совпадений во входном тексте).

Теоретически значение n и m не ограничены (можно использовать максимальное значение для 32-х битного числа).

Жадность¶

RegEx Находит
b+ bbbb
Ь+? b
b*? пустую строку
b<2,3>? bb
b

bbb

Вы можете переключить все повторы в не жадный режим (modifier /g, ниже мы используем in-line модификатор change).

RegEx Находит
(?-g)Ь+ b

Сверхжадные повторы (Possessive Quantifier)¶

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

Альтернативы¶

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

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

RegEx Находит
foo(bar|foo) foobar или foofoo

Группы (подвыражения)¶

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

Позиция, длина и фактические значения подвыражений будут в MatchPos, MatchLen и Match.

Вы можете заменить их с помощью функции Substitute.

Например, для входной строки foobar регулярное выражение (foo(bar)) найдет:

Группы (подвыражения) значение
0 foobar
1 foobar
2 bar

Ссылки на группы (Backreferences)¶

RegEx Находит
(.)\1+ aaaa и cc
(.+)\1+ также abab и 123123

([‘»]?)(\d+)\1 соответствует «13» (в двойных кавычках) или ‘4’ (в одинарных кавычках) или 77 (без кавычек) и т. д.

Именованные группы (подвыражения) и ссылки на них¶

RegEx Находит
(?P [‘»])\w+(?P=qq) «word» и ‘word’

Модификаторы¶

Модификаторы предназначены для изменения поведения регулярных выражений.

Вы можете установить модификаторы глобально в вашей системе или изменить их внутри регулярного выражения, используя (?imsxr-imsxr).

Для изменения модификаторов используйте ModifierStr или соответствующие TRegExpr свойства Модификатор *.

i, без учета регистра¶

Регистро-независимые сравнения. Использует установленные в вашей системе языковые настройки, см. также InvertCase.

m, многострочные строки¶

s, одиночные строки¶

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

г, жадность¶

Специфичный для TRegExpr модификатор.

x, расширенный синтаксис¶

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

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

Также символ # отделяет комментарии.

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

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

г, русские диапазоны¶

Специфичный для TRegExpr модификатор.

В русской таблице ASCII символы ё / Ё размещаются отдельно от других.

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

Когда модификатор включен:

RegEx Находит
а-я символы от а до я и ё
А-Я символы от А до Я и Ё
а-Я все русские символы

Проверки или заглядывания вперед и назад (Assertions)¶

Заглядывание вперед (lookahead assertion) foo(?=bar) совпадает «foo» только перед «bar», при этом сама строка «bar» не войдет в найденный текст.

Отрицательное заглядывание вперед (negative lookahead assertion): foo(?!bar) совпадает «foo» только если после этой строки не следует «bar».

Ретроспективная проверка (lookbehind assertion): (? совпадает «bar» только после «foo», при этом сама строка «foo» не войдет в найденный текст.

Отрицательное заглядывание вперед (negative lookahead assertion): foo(?!bar) совпадает «bar» только если перед этой строки нет «foo».

Не захватываемые группы (подвыражения)¶

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

RegEx Находит
(https?|ftp)://([^/\r\n]+) в https://sorokin.engineer захватит подвыражения https и sorokin.engineer
(?:https?|ftp)://([^/\r\n]+) в https://sorokin.engineer захватит только sorokin.engineer

Атомарные группы¶

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

Модификаторы¶

Комментарии¶

Рекурсия¶

Выражение a(?R)?z совпадает с одним или более символом «a» за которым следует точно такое же число символов «z».

Вызовы подвыражений¶

Нумерованные группы (подвыражения) обозначают (?1) … (?90) (максимальное число групп определяется константой в TRegExpr).

Это похоже на рекурсию, но повторяет только указанную группу (подвыражение).

Unicode категории (category)¶

Метасимвол \p это один символ указанной Unicode категории (category). Синтаксис: \pL или \p если категория обозначается одним символом, \p для 2-символьных категорий.

Метасимвол \P это символ не из Unicode категории (category).

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

Послесловие¶

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

Источник

Понравилась статья? Поделить с друзьями: