© unsplash.com

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

Прошлые уроки

Часть 1. Что такое регулярные выражения? Классы символов + таблица со спецсимволами.

Наборы и диапазоны

Иногда нам хочется найти что-то более конкретное, чем класс. Для того, чтобы задать набор символов, из которого будет найден только один, нам помогут квадратные скобки:

[] — границы набора символов

Например, мы хотим найти любую гласную или цифры 1 или 2:

[аоиеёэыуюя] — «собака»

[12] — «156 вилок и 200 ложек»

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

[A-Z] — найдёт все прописные буквы латиницы

[А-Яа-я] — найдёт все буквы, прописные и строчные, русского алфавита

[1-4] — найдёт только цифры от 1 до 4

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

[^аоиеёэыуюя] — «собака».

На что обратить внимание при работе с наборами

Метасимволы, которые помещены в набор (то есть между квадратными скобками) потеряют своё специальное значение:

[\d] — «120 days»

Из всего набора каждый раз находится только любой один знак:

[слово] — «кот сло пал сосиску»

з[ая]йк — «зайку бросила хозяйка»

зайк — «зайку бросила хозяйка»

Отрицание класса символов

Точно так же, как и наборы, классы символов можно отрицать. Это делается так:

\w — все латинские буквенные символы, \W — всё, кроме латинских буквенных символов

\d -> \D — всё, кроме цифр

\s -> \S — всё, кроме пробелов

Этот принцип работает со всеми классами.

Например,

\D+ — «200 burgers» (обратите внимание, пробел тоже включён в результат поиска, ведь это не цифра)

\S+ — «200 burgers!» (найдено всё, кроме пробелов, то есть в этом примере — буквы, цифры и знаки препинания)

Упражнение урока

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

Олень – северное животное. Нос у него покрыт серебристой шёрсткой. Если бы шерсти на носу не было, олень бы его отморозил.

\wлень

Олень|о

[Оолень]

[Оо]лень

Ответ на задание

[Оо]лень.

[Оолень] найдёт только один символ из набора, а не слово целиком.

В шаблоне \wлень символ \w в найдёт любую латинскую букву или цифру, что нам не подходит.