В этом уроке мы познакомимся с символьными классами.
Символьный класс — это специальное обозначение, задающее поиск любого символа из определенного набора.
Рассмотрим принцип работы символьных классов на простом примере. Предположим, что нам нужно найти только буквы алфавита. Для этого можно использовать символьные классы, которые описываются в квадратных скобках, и в нашем случае все буквы английского алфавита в нижнем регистре будут выглядеть так: [a-z]
. Мы видим, что символы алфавита в строке подсветились:
/ [a-z]
/
java
11_34-1938 tab
new line
Таким же образом можно задать поиск цифр от нуля до девяти:
/ [0-9]
/
java 11
_34
-1938
tab
new line
А в этом примере мы укажем только 2 символа, каждый из которых будет найден:
/ [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
В регулярных выражениях часто используют специальные предопределенные символьные классы. Они записываются с помощью символа \
и имеют свои обозначения в языке регулярных выражений. В прошлом уроке мы использовали \
как один из escape-символов для экранирования. Здесь же он используется, как часть обозначения. Давайте найдем в тексте все цифры с помощью обозначения класса цифр \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
Вам ответят команда поддержки Хекслета или другие студенты.
Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.
Загляните в раздел «Обсуждение»:
Статья «Ловушки обучения»
Вебинар «Как самостоятельно учиться»
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.
Наши выпускники работают в компаниях:
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
Зарегистрируйтесь или войдите в свой аккаунт