Регулярные выражения — это формальный язык, который используется для поиска символов и манипуляций с подстроками. Это мощный инструмент, который позволяет эффективно работать с текстом.
Регулярные выражения — это специальная текстовая строка, которая задает шаблон поиска. В шаблоне поиска используются:
- Символы, которые нужно найти
- Специальные символы
Чтобы было нагляднее, в этом курсе мы будем использовать такой формат примеров:
- Сверху — шаблонные строки с регулярными выражениями
- Снизу — строки, в которых мы производим поиск
Рекомендуем самостоятельно прогонять все примеры в онлайн-редакторах регулярных выражений: regex101, regexr или любых других. Выбирайте движок JavaScript или PCRE для примеров, которые JavaScript не поддерживают.
Для начала зададим шаблон с символами, которые мы хотим найти в строке:
/java
/
java
\ python ruby1.9 java
script c#
Обратите внимание на символ /
— его называют разделитель (delimiter). Его указывают в начале и конце регулярного выражения, чтобы отделить регулярное выражение от остального текста.
Мы видим, что с текстом java
сопоставилось два варианта из строки. Такое совпадение называется точным. Мы не использовали специальных символов и нашли в тексте комбинации символов, совпадающие с заданной комбинацией на сто процентов.
Если мы добавим еще один символ, то соответствия уже не будет, потому что такой подстроки в нашей строке нет:
/javab
/
java \ python ruby1.9 javascript c#
Разберем подробнее разницу между специальными символами и символами, которые мы ищем в тексте. Давайте попробуем найти в тексте любой символ. Для этого мы используем метасимвол — точку .
:
/.
/
java \ python ruby1.9 javascript c#
В результате подсветилась вся строка.
Теперь попробуем комбинировать символы в шаблонной строке. Поищем совпадения комбинаций любого символа с символом y
. В таком случае мы получим два совпадения:
/.y
/
java \ py
thon ruby
1.9 javascript c#
При комбинировании специальных и обычных символов нужно учитывать особое поведение спецсимволов.
Обратите внимание на пример ниже, где мы задаем в шаблоне символы 1.9
. Важно понимать, что они соответствуют не самой комбинации символов 1.9
, а всем подстрокам из трех символов, в которых первый символ — 1
, а последний — 9
.
Таким образом, между этими символами в строке может находиться что угодно:
/1.9
/
java \ python ruby1.9
javascript c#
java \ python ruby189
javascript c#
java \ python ruby1k9
javascript c#
Представим, что нам нужно использовать точку как обычный знак препинания, а не как специальный символ в языке регулярных выражений. В таком случае нужно применить экранирование символов с помощью одного из так называемых escape-символов.
Для этого поставим обратный слэш \
перед символом, который мы хотим экранировать. Так спецсимвол перестанет иметь специальное значение. Как видим, все работает. Если вместо точки мы поставим другой символ, наша подстрока не будет совпадать с шаблонной:
/1\.9
/
java \ python ruby1.9
javascript c#
java \ python ruby1d9 javascript c#
Точно так же можно экранировать и сам обратный слэш, если нам нужно использовать его в качестве обыкновенного символа. В результате мы увидим следующее совпадение:
/\\
/
java \
python ruby1d9 javascript c#
Дополнительные материалы
- Регулярные выражения
- Cheatsheet — таблица синтаксиса регулярных выражений
- Онлайн редактор регулярных выражений
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.