В этом уроке мы познакомимся с символьными классами — специальными обозначениями, которые задают поиск любого символа из определенного набора.
Рассмотрим принцип работы символьных классов на простом примере. Предположим, что нам нужно найти только буквы алфавита.
Для этого можно использовать символьные классы, которые описываются в квадратных скобках. В нашем случае все буквы английского алфавита в нижнем регистре будут выглядеть так: [a-z]
. Мы видим, что символы алфавита в строке подсветились:
/ [a-z]
/
java
11_34-1938 tab
new line
Таким же образом можно задать поиск цифр от нуля до девяти:
/ [0-9]
/
java 11
_34
-1938
tab
new line
А в этом примере мы укажем только два символа, каждый из которых будет найден:
/ [aj]
/
ja
va
11_34-1938 ta
b
new line
В символьных классах можно использовать механизм отрицания. Если мы ставим символ ^
перед первым символом в квадратных скобках, то начинается инвертированный поиск — мы находим все символы, кроме перечисленных после ^
:
/ [^aj]
/
jav
a 11_34-1938 t
ab
new line
Если наряду с буквами алфавита необходимо найти дефис, то нужно указать его в начале или конце группы символов. Тогда он не будет восприниматься как специальный символ:
/ [aj-]
/
ja
va
11_34-
1938 ta
b
new line
В регулярных выражениях часто используются специальные предопределенные символьные классы. Они записываются с помощью символа \
и имеют свои обозначения в языке регулярных выражений.
В прошлом уроке мы использовали \
для экранирования. Здесь же он используется как часть обозначения. Давайте найдем в тексте все цифры с помощью обозначения класса цифр \d
:
/ \d
/
java 11
_34
-1938
tab
new line
Если мы укажем заглавную букву D
, то в результате поиска получим все остальные символы — в том числе, пробелы и табуляцию:
/ \D
/
java
11_
34-
1938tab
new line
Для поиска пробельных символов существует класс \s
. В свою очередь, класс \S
обозначает все непробельные символы. Как мы видим, принцип обозначения символьных классов прост:
- Строчная буква обозначает класс
- Заглавная — все, что к нему не относится
Есть еще один популярный класс \w
, который включает в себя все буквы алфавита, все цифры и подчеркивания.
В коде ниже не видно, но пробельные символы не соответствуют этому классу, равно как и -
:
/ \w
/
java
11_34
-1938
tab
new
line
Использование класса \w
равносильно такой записи: [0-9a-zA-Z_]
. Обратите внимание, что при поиске в диапазоне символов важен регистр, поэтому в этой записи после строчных a-z
следуют заглавные A-Z
.
Соответственно, \W
находит инвертированный вариант своей строчной копии. Здесь уже вместе с дефисом будут найдены и пробельные символы:
/ \W
/
java 11_34-
1938 tab
new line
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.