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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Итого

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

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

Источник

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

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

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

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

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

Спецсимволы

Аналог Описание
() подмаска, вложенное выражение
[] групповой символ
количество вхождений от «a» до «b»
| логическое «или», в случае с односимвольными альтернативами используйте []
\ экранирование спец символа
. любой сивол, кроме перевода строки
\d 3 десятичная цифра
\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.

Источник

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

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

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

Общая категория Юникода или именованный блок. Входная строка должна содержать символ из определенной категории Юникода или непрерывного диапазона символов Юникода. Дополнительные сведения см. в разделе Категория Юникода или блок Юникода.

Отрицательная общая категория Юникода или именованный блок. Входная строка не должна содержать символ из определенной категории Юникода или непрерывного диапазона символов Юникода. Дополнительные сведения см. в разделе Отрицательная категория Юникода или блок Юникода.

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

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

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

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

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

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

Положительная группа символов: [ ]

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

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

Здесь character_group — это список отдельных символов, которые могут присутствовать во входной строке для успешного сопоставления. character_group может включать в себя любое сочетание литеральных символов, escape-символов или классов символов.

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

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

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

Шаблон Описание
[aeiou] Соответствует всем гласным.
[\p

\d]

Соответствует всем знакам препинания и десятичным цифрам.
[\s\p

]

Соответствует всем символам пробела и знакам препинания.

В следующем примере определена положительная группа знаков, которая содержит символы «a» и «e», таким образом, чтобы входная строка содержала слова grey или gray и еще одно слово.

Регулярное выражение gr[ae]y\s\S+?[\s|\p

] определяется следующим образом:

Шаблон Описание
gr Соответствует буквенным символам «gr».
[ae] Соответствует букве «a» или «e».
y\s Соответствует буквенному символу «y», за которым следует пробел.
\S+? Соответствует одному или нескольким символам, отличным от пробела.
[\s\p

]

Соответствует символу пробела или знаку препинания.

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

Определение регулярного выражения \b[A-Z]\w*\b показано в таблице ниже.

Шаблон Описание
\b Начало на границе слова.
[A-Z] Соответствует любому символу верхнего регистра от А до Z.
\w* Совпадение с нулем или большим числом буквенных символов.
\b Соответствует границе слова.

Отрицательная группа символов: [^]

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

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

Здесь character_group — это список отдельных символов, которые не могут присутствовать во входной строке для успешного сопоставления. character_group может включать в себя любое сочетание литеральных символов, escape-символов или классов символов.

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

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

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

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

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

Шаблон Описание
[^aeiou] Соответствует всем символам, кроме гласных.
[^\p

\d]

Соответствует всем символам, кроме знаков препинания и десятичных цифр.

Следующий пример соответствует любому слову, начинающемуся с символов «th», за которыми нет символа «o».

Определение регулярного выражения \bth[^o]\w+\b показано в таблице ниже.

Шаблон Описание
\b Начало на границе слова.
th Соответствует буквенным символам «th».
[^o] Соответствует любому символу, отличающемуся от «o».
\w+ Совпадение с одним или несколькими символами слова.
\b Конец на границе слова.

Символ точки (.) соответствует любому символу, кроме \n (символ перевода строки, \u000A), с использованием указанных ниже двух квалификаторов.

Категория Юникода или блок Юникода: \p<>

В стандарте Юникода каждому символу присваивается общая категория. Например, определенный символ может быть прописной буквой (категория Lu ), десятичной цифрой (категория Nd ), математическим символом (категория Sm ) или разделителем абзацев (категория Zl ). Определенные наборы символов стандарта Юникод также занимают некоторый диапазон или блок последовательных кодовых точек. Например, базовая латинская кодировка находится в диапазоне от \u0000 до \u007F, а арабская кодировка находится в диапазоне от \u0600 до \u06FF.

Конструкция регулярного выражения

соответствует любым символам, которые относятся к общей категории Юникода или именованному блоку, где name — сокращенное название категории или имя блока. Список сокращений категорий см. в подразделе Поддерживаемые общие категории Юникода далее в этом разделе. Список именованных блоков см. в подразделе Поддерживаемые именованные блоки далее в этом разделе.

Определение регулярного выражения \b(\p+(\s)?)+\p\s(\p+(\s)?)+ показано в таблице ниже.

Шаблон Описание
\b Начало на границе слова.
\p+ Соответствует одному или нескольким греческим символам.
(\s)? Совпадение с нулем или одним символом пробела.
(\p+(\s)?)+ Выделяет один или несколько раз шаблон из одного или нескольких греческих символов, за которыми следует ноль или один символ пробела.
\p

Соответствует знакам препинания и тире.
\s Соответствует пробелу.
\p+ Соответствует одному или нескольким базовым латинским символам.
(\s)? Совпадение с нулем или одним символом пробела.
(\p+(\s)?)+ Выделяет один или несколько раз шаблон из одного или нескольких базовых латинских символов, за которыми следует ноль или один символ пробела.

Отрицательная категория Юникода или блок Юникода: \P<>

В стандарте Юникода каждому символу присваивается общая категория. Например, определенный символ может быть прописной буквой (категория Lu ), десятичной цифрой (категория Nd ), математическим символом (категория Sm ) или разделителем абзацев (категория Zl ). Определенные наборы символов стандарта Юникод также занимают некоторый диапазон или блок последовательных кодовых точек. Например, базовая латинская кодировка находится в диапазоне от \u0000 до \u007F, а арабская кодировка находится в диапазоне от \u0600 до \u06FF.

Конструкция регулярного выражения

соответствует любым символам, которые не относятся к общей категории Юникода или именованному блоку, где name — сокращенное название категории или имя блока. Список сокращений категорий см. в подразделе Поддерживаемые общие категории Юникода далее в этом разделе. Список именованных блоков см. в подразделе Поддерживаемые именованные блоки далее в этом разделе.

Шаблон регулярного выражения (\P)+ выделяет один или несколько символов, которые не являются символами валют. Это позволяет удалить любой символ валюты из строки результата.

Словообразующий символ: \w

\w соответствует любому словообразующему символу. Словообразующий символ входит во все категории Юникода, перечисленные в следующей таблице.

Категория Описание
Ll Буква: строчные буквы
Лы Буква: прописные буквы
Lt Буква: заглавный регистр
Lo Буква: другие
Lm Буква: модификатор
Mn Метка: не занимающая место
Nd Число: десятичная цифра
Pc Пунктуация, соединитель. Эта категория включает десять символов, наиболее часто используемым из которых является знак подчеркивания (_), u+005F.

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

Элемент Описание
(\w) Соответствует словообразующему символу. Это первая группа записи.
\1 Соответствует значению первой записи.

Несловообразующий символ: \W

\W соответствует любому несловообразующему символу. Элемент языка \W эквивалентен следующему классу символов:

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

Категория Описание
Ll Буква: строчные буквы
Лы Буква: прописные буквы
Lt Буква: заглавный регистр
Lo Буква: другие
Lm Буква: модификатор
Mn Метка: не занимающая место
Nd Число: десятичная цифра
Pc Пунктуация, соединитель. Эта категория включает десять символов, наиболее часто используемым из которых является знак подчеркивания (_), u+005F.

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

Элемент Описание
\b Совпадение должно начинаться на границе слова.
(\w+) Совпадение с одним или несколькими символами слова. Это первая группа записи.
(\W)

Выделяет несловообразующий символ один или два раза. Это вторая группа записи.

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

Символ пробела: \s

\s соответствует любому символу пробела. Это эквивалентно управляющим последовательностям и категориям Юникода, перечисленным в следующей таблице.

Категория Описание
\f Символ перевода страницы, \u000C.
\n Символ новой строки, \u000A.
\r Символ возврата каретки, \u000D.
\t Символ табуляции, \u0009.
\v Символ вертикальной табуляции, \u000B.
\x85 Многоточие или символ NEXT LINE (NEL) (…), \u0085.
\p

Соответствует любому разделительному символу.
Элемент Описание
\b Совпадение должно начинаться на границе слова.
\w+ Совпадение с одним или несколькими символами слова.
(e)? Выделяет «e» ноль или один раз.
s Выделяет «s».
(\s|$) Совпадает с символом пробела или концом входной строки.

Символ, не являющийся пробелом: \S

Элемент Описание
\b Совпадение должно начинаться на границе слова.
(\S+) Соответствует одному или нескольким символам, которые не являются пробелами. Это первая группа записи.
\s? Совпадение с нулем или одним символом пробела.

Десятичная цифра: \d

\d соответствует любой десятичной цифре. Он эквивалентен шаблону регулярного выражения \p , который включает стандартные десятичные цифры 0–9, а также десятичные цифры из некоторых других наборов символов.

Элемент Описание
^ Начало совпадения в начале входной строки.
\(? Выделяет ноль или один символ «(«.
\d

Совпадение с тремя десятичными цифрами.
\)? Выделяет ноль или один символ «)».
[\s-] Выделяет дефис или пробел.
(\(?\d<3>\)?[\s-])? Выделяет несколько раз необязательные открывающие скобки с последующими тремя десятичными цифрами, необязательную закрывающую скобку, а также знак пробела или дефис (если они есть). Это первая группа записи.
\d<3>-\d

Выделяет три десятичных цифры, следующий за ними дефис и еще четыре десятичные цифры.
$ Соответствует концу входной строки.

Символ, не являющийся цифрой: \D

\D соответствует любому символу, не являющемуся цифрой. Он эквивалентен шаблону регулярного выражения \P .

В следующем примере показан элемент языка \D. Он проверяет, включает ли строка (например, номер продукта) соответствующее сочетание десятичных и недесятичных символов. Шаблон регулярного выражения ^\D\d<1,5>\D*$ определяется, как показано в следующей таблице.

Элемент Описание
^ Начало совпадения в начале входной строки.
\D Выделяет любой символ, не являющийся цифрой.
\d

Выделяет от одной до пяти десятичных цифр.
\D* Выделяет нуль, одну или несколько недесятичных цифр.
$ Соответствует концу входной строки.

Поддерживаемые общие категории Юникода

В Юникоде определяются общие категории, приведенные в следующей таблице. Дополнительные сведения см. в подразделах «Формат файлов UCD» и «Значения общих категорий» в разделе База данных символов Юникода.

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

Поддерживаемые именованные блоки

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

Выражение вычитания класса знаков имеет следующий вид:

Источник

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