Regular Expressions или RegExp могут быть одним из самых мощных инструментов в наборе программиста. В статье рассказываем, что такое регулярные выражения, как их использовать и делимся полезными ссылками.

Блог студии web-разработки YuSMP Group содержит много полезной информации от ведения проекта до разбора технологий веб-разработки. Если не нашли ответа на свой вопрос, обратитесь к нам любым удобным способом: здесь оставили контакты

<sub>инфографика pythonivan shamaevru<sub>

Краткий обзор

Регулярные выражения — это последовательность символов, определяющую шаблон поиска. RegExp возникли в 1950-х годах, когда Стивен Коул Клини описал идею, которую назвал «регулярным языком», часть которой стала известна как «теорема Клини». На очень высоком уровне говорится, что если элементы языка могут быть определены, то выражение может быть написано для сопоставления шаблонов в этом языке.

С тех пор регулярные выражения стали частью даже самых ранних программ Unix, включая vi, sed, awk, grep и другие. На самом деле слово grep происходит от команды, которая использовалась в самом раннем редакторе «ed», а именно g/re/p, что означает «выполнить глобальный поиск этого регулярного выражения и вывести строки». 

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

В разных языковых средах, регулярные выражения JS, PHP, JAVA, .NET будут примерно одинаковыми без существенных различий.

Как упоминалось выше, RegExp используются для определения шаблона, чтобы помочь сопоставить или «найти» объекты, соответствующие этому шаблону. Объектами могут быть файлы в системе при использовании find команды или блок текста в файле, который мы можем искать, используя grep, awk, vi или sed.

Начните с основ

Начнем с самого начала. Когда-нибудь хотели распечатать список файлов в каталоге, но он был слишком длинным? Возможно, вы видели, как кто-то вводил список изображений GIF в каталоге, например:

$ ls *.gif

Это регулярное выражение, пример простой и наглядный.

При написании некоторые символы имеют особое значение, позволяющее перейти от сопоставления только символов к сопоставлению целых наборов символов. В этом случае * символ, также называемый wildcard, заменяет имена файлов и позволяет сопоставлять все файлы, оканчивающиеся на .gif.

Синтаксис регулярных выражений

Каждая строка — это уже Regular Expressions. Во всех языках, включая C++, регулярные выражения чувствительны к регистру: “спасибо” и “Спасибо” будут считываться как разные значения.

Еще важно следить за специальными символами:

 ^ $ * + ? { } [ ] \ | ( ) 

При экранировании JAVA нужно добавить \ перед каждым знаком.

Поиск шаблонов в файле

Следующим шагом в обучении регулярным выражениям sql и в других языках является поиск шаблонов в файле, особенно использование шаблона замены для быстрого внесения изменений.

Два распространенных способа сделать это:

  1. Используйте vi, чтобы открыть файл, найти шаблон и внести изменения (даже автоматически с помощью замены).
  2. Используйте «редактор потока», также известный как sed, для программного поиска в файле и внесения изменений.

Давайте начнем с изучения некоторых JS RegExp, используя vi для редактирования следующего файла:

Быстрая коричневая лиса перепрыгнула через ленивого пса.
Простой тест
Более сложный тест
Экстремальный тест
ABC 123 abc 567
Собака ленива

Теперь, когда этот файл открыт, давайте посмотрим на некоторые примеры, которые помогут найти некоторые совпадающие строки внутри и даже автоматически заменить их.

Чтобы упростить задачу, настроим vi на игнорирование регистра. Введите set ic, чтобы включить поиск без учета регистра.

Теперь, чтобы начать поиск в vi, введите /символ, за которым следует шаблон поиска.

Поиск вещей в начале или конце строки

Чтобы найти строку, начинающуюся с «Simple», используйте следующий шаблон регулярного выражения linux или другой языковой среды:

/^Simple

Обратите внимание, что на изображении ниже выделена только строка, начинающаяся с «Simple». Карет ( ^)  это начало строки

«Простой» выделен

Далее давайте воспользуемся $ символом, который означает конец строки.

/test$

«Тест» выделен

Видите, как он выделяет обе строки, заканчивающиеся на «тест»? Также обратите внимание, что в четвертой строке есть слово test, но не в конце, поэтому эта строка не выделена.

В этом заключается сила RegExp, дающая возможность быстро и легко просматривать большое количество совпадений, но в частности детализировать только точные совпадения.

Полезные сервисы

  • RegExr, Regexpal или Regex101 — чтобы протестировать или просто потренироваться.
  • Regexper строит диаграммы, которые помогут разобраться с существующими RegExp.
  • Визуальные конструкторы функций: RegExp Builder для JavaScript. Debuggex для PCRE, JavaScript или Python.

У вас есть проект, который хотели бы обсудить? Возможно, веб-услуги и разработка в YuSMP Group помогут реализовать задуманное. Посмотрите кейсы YuSMP Group, чтобы убедиться в профессионализме студии. Оставьте заявку на сайте или свяжитесь удобным способом — наши менеджеры ответят и проконсультируют вас.