Зарегистрируйтесь, чтобы продолжить обучение

Символьные классы Регулярные выражения (Regexp)

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

Рассмотрим принцип работы символьных классов на простом примере. Предположим, что

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

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


/ [cb]at /

cat bat hat cab


https://regex101.com/r/J7f2Fw/1

Символьный класс в квардратных скобках [] ищет один из символов. Также мы указали текст at, он тоже будет найден.

Но что, если нам нужно найти только буквы алфавита? Для этого использовать только символьные классы в квадратных скобках. К примеру, все буквы английского алфавита в нижнем регистре будут выглядеть так: [a-z]. Мы видим, что символы алфавита в строке подсветились:


/ [a-z]/

java 11_34-1938 tab

new line

https://regex101.com/r/9Hmnd6/1


Регулярное выражение /[a-z]/ соответствует любому одному строчному символу английского алфавита. Таким образом, будут найдены следующие совпадения:

  • В строке java: j, a, v, a
  • В строке tab: t, a, b

Таким же образом можно задать поиск цифр от нуля до девяти:


/ [0-9]/

java 11_34-1938 tab

new line


https://regex101.com/r/8fvDUW/1

В строке 11_34-1938: 1, 1, 3, 4, 1, 9, 3, 8

А в этом примере мы укажем только два символа, каждый из которых будет найден:


/ [aj]/

java 11_34-1938 tab

new line


https://regex101.com/r/M8go1R/1

  • В строке java: j, a
  • В строке tab: a

В символьных классах можно использовать механизм отрицания. Если мы ставим символ ^ перед первым символом в квадратных скобках, то начинается инвертированный поиск — мы находим все символы, кроме перечисленных после ^:


/ [^aj]/

java 11_34-1938 tab

new line


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


/ [aj-]/

java 11_34-1938 tab

new line


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

В прошлом уроке мы использовали \ для экранирования. Здесь же он используется как часть обозначения. Давайте найдем в тексте все цифры с помощью обозначения класса цифр \d:


/ \d/

java 11_34-1938 tab

new line


Если мы укажем заглавную букву D, то в результате поиска получим все остальные символы — в том числе, пробелы и табуляцию:


/ \D/

java11_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



Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

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

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

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

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
Верстка на HTML5 и CSS3, Программирование на JavaScript в браузере, разработка клиентских приложений используя React
10 месяцев
с нуля
Старт 27 февраля
профессия
Программирование на Python, Разработка веб-приложений и сервисов используя Django, проектирование и реализация REST API
10 месяцев
с нуля
Старт 27 февраля
профессия
Программирование на Java, Разработка веб-приложений и микросервисов используя Spring Boot, проектирование REST API
10 месяцев
с нуля
Старт 27 февраля
профессия
Программирование на PHP, Разработка веб-приложений и сервисов используя Laravel, проектирование и реализация REST API
10 месяцев
с нуля
Старт 27 февраля
профессия
Программирование на JavaScript в браузере и на сервере (Node.js), разработка бекендов на Fastify и фронтенда на React
16 месяцев
с нуля
Старт 27 февраля
профессия
Программирование на JavaScript, разработка веб-приложений, bff и сервисов используя Fastify, проектирование REST API
10 месяцев
с нуля
Старт 27 февраля
профессия
новый
Git, JavaScript, Playwright, бэкенд-тесты, юнит-тесты, API-тесты, UI-тесты, Github Actions, HTTP/HTTPS, API, Docker, SQL
8 месяцев
c опытом
Старт 27 февраля

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»