В этом уроке мы подробнее поговорим про классы символов, про диапазоны и отрицание.
Прошлые уроки
Часть 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
в найдёт любую латинскую букву или цифру, что нам не подходит.