Регулярные выражения (Regexp)

Теория: Представление символов и метасимвол

Регулярные выражения — это формальный язык, который используется для поиска символов и манипуляций с подстроками. Это мощный инструмент, который позволяет эффективно работать с текстом.

Регулярные выражения — это специальная текстовая строка, которая задает шаблон поиска. В шаблоне поиска используются:

  • Символы, которые нужно найти
  • Специальные символы

Чтобы было нагляднее, в этом курсе мы будем использовать такой формат примеров:

  • Сверху — шаблонные строки с регулярными выражениями
  • Снизу — строки, в которых мы производим поиск

Для начала зададим шаблон с символами, которые мы хотим найти в строке:


/java/

java \ python ruby1.9 javascript c#


Обратите внимание на символ / — его называют разделитель (delimiter). Его указывают в начале и конце регулярного выражения, чтобы отделить регулярное выражение от остального текста.

Мы видим, что с текстом java сопоставилось два варианта из строки. Такое совпадение называется точным. Мы не использовали специальных символов и нашли в тексте комбинации символов, совпадающие с заданной комбинацией на сто процентов.

Если мы добавим еще один символ, то соответствия уже не будет, потому что такой подстроки в нашей строке нет:


/javab/

java \ python ruby1.9 javascript c#


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


/./

java \ python ruby1.9 javascript c#


В результате подсветилась вся строка.

Теперь попробуем комбинировать символы в шаблонной строке. Поищем совпадения комбинаций любого символа с символом y. В таком случае мы получим два совпадения:


/.y/

java \ python ruby1.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#


Рекомендуемые программы