© unsplash.com

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

Не помните, что такое регулярное выражение и как выделить все числа в тексте «33 богатыря, 1001 ночь»? Повторите
Часть 1. Что такое регулярные выражения? Классы символов.

Не помните, как найти все заглавные буквы в слове ПрИвЕтиКи? Повторите
Часть 2. Наборы и диапазоны. Отрицания

Классы и наборы: повторение

Классы символов мы задавали следующим образом:

\d — 1 р.

\D — 1 р.

Наборы и диапазоны — так:

[123] — 40 мертвецов и 1 бутылка рома

[А-Я] — ПрИвЕтиКи

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

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

[^А-Я] — найдёт всё, кроме заглавных букв кириллицы: «кАПС»

[^ауоыиэяюёе] — найдёт всё, кроме строчных гласных: «велосипедист»

Ищем любой символ

Как быть, если мы хотим найти вообще любой символ? В регулярных выражениях для этого есть особый знак — точка. Точка находит любой символ за исключением переноса строки. Например:

.+ найдёт «▥Flบffy$heeⓟⁿ»

Такие символы, которые обозначают не себя, а что-то другое, называются метасимволами. 

Ищем точку

Хорошо, а как найти саму точку, если нужна только она? Для этого перед точкой нужно поставить \.

\. будет соответствовать именно точка. 

\. Найдет 3.14

Такой прием называется экранированием. Экранировать можно любой метасимвол. Например, + — как вы помните, это тоже особый символ (он обозначает, что предыдущий символ повторяется от 1 до бесконечности раз).

1+ найдет 1111111

1\+ найдет 1+

Сам \ тоже можно экранировать — ведь это тоже метасимвол. 

\\ найдет \

Таблица символов — здесь можно посмотреть все метасимволы

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

Как найти предложение, в начало которого затесался странный символ?

Личный попугай капитана Флинта изучил 1561 ругательств на разных языках. 271 ругательство на английском, 352 на французском и 127 на испанском. &остальные попугай почерпнул из могучего русского языка.

\. . найдёт все случаи, когда после точки в конце предложения есть пробел и любой другой символ.

. \W точка не экранирована и найдёт любые символы. Кроме того, \W означает «не цифра и не латинская буква», то есть выражение дополнительно найдёт буквы кириллицы.

\. [^А-я0-9] верный вариант. Найдёт все случаи, когда после точки с пробелом стоит не буква и не цифра. Можно улучшить: \. [^А-Я0-9] Тогда выражение найдёт ещё и случаи, когда в начале предложения стоит строчная буква.

\. ^[А-я0-9] некорректное выражение. Для отрицания диапазона знак карет ^ должен стоять внутри скобок.