Что такое регулярные выражения?
Регулярные выражения (regular expressions, RegEx) — это специальный язык обобщенного описания срок в тексте. Например, на языке регулярных выражений можно легко и компактно описать что-то вроде «любая строка, в которой сначала идут четыре цифры, потом идет дефис или пробел, а потом от 2 до 4 символов латинского алфавита, среди которых нет z». Регулярные выражения используют для поиска или замены строк, для проверки соответствия строк заданному шаблону.
Возможности регулярных выражений встроены в основные современные языки программирования. Хотя RegEx немного отличается для разных языков, базовый синтаксис остаётся одинаковым.
Зачем они нужны?
Почти всегда, когда люди говорят про использование регулярных выражений, кто-нибудь вспоминает этот комикс:
Регулярные выражения можно использовать для поиска дат или особых строк в большом тексте (например, всех вопросительных предложений, в которых меньше пяти слов). Среди более традиционных примеров использования — поиск телефонов, email’ов, ссылок (url), почтовых индексов, номеров карт, ip адресов.
Из чего состоит простое регулярное выражение?
Поисковый запрос, который пишут с использованием регулярных выражений, называют шаблоном. В принципе, регулярными выражениями можно пользоваться как обычным поиском, и шаблон «кот» найдёт все случаи, когда в тексте встречается «кот».
Однако существует и набор специальных символов, которые позволяют искать что-то более сложное. Ниже можно найти список основных спецсимволов, но в этот раз мы расскажем только про одну группу: классы символов.
Классы символов позволяют искать какой-то тип знаков, а не конкретную информацию.
Например:
\w
— любая одна буква или цифра (к сожалению, это работает только с латинским алфавитом. Как быть с русским, расскажем в следующий раз)
\s
— любой один пробельный символ
\d
— любая одна цифра (именно цифра от 0 до 9, не все число!)
\n
— новая строка
\t
— tab
Например,
\w\w
— это две буквы подряд («on», «to», «at») или часть более длинного слова («sun»)
\w\w\w
— это любые три буквы подряд («the», «how», «cat», «book»)
Если вы хотите найти только наборы символов конкретной длины, можно указать количество повторений в фигурных скобках:
\w{4}
— «joke», «bush», «pizza»
А если хочется найти целые слова любой длины, шаблон будет выглядеть следующим образом:
\w+
Внимание! Этот шаблон найдёт все слова, написанные латинским алфавитом и числа, но не увидит дефисы внутри слов, кириллицу и буквы вроде ö и é.
Упражнение урока
Как написать шаблон для извлечения обозначений годов?
Пусть есть текст:
Дом будет построен в 1967 году. Только в нем одном будет установлено 740 газовых плит, то есть в 740 раз больше, чем было их в нашем городе до 1913 года!
Надо извлечь все даты и только их!
Где потренироваться?
В браузере: https://regex101.com/ или https://regexr.com/.
В поле «text» вставьте текст, в котором хотите что-то найти. В поле «expression» — ваше регулярное выражение. Оба сайта подсвечивают найденные подстроки и дают описание, что делает каждая из частей вашего выражения.
На компьютере: установите текстовый редактор Nodepad++ на Windows или BBEdit на Mac OS, оба редактора можно использовать бесплатно.
Ответ
\d{4}
или \d\d\d\d
\d+
— неверный ответ, потому что он найдёт числа любой длины, в том числе количество газовых плит (740 газовых плит).