/Hello World/, в этой статье давайте узнаем о регулярных выражениях (также известных как Regex или Regexp), дадим несколько советов по этому поводу и посмотрим, как они могут помочь вам, когда вам нужен простой способ извлечения , проверить (сопоставить) и заменить данные (с упором на строки).

Введение
Да, я знаю, что регулярные выражения — страшные монстры для большинства новичков в ИТ, по крайней мере для меня. Хороший момент: когда я говорю об ИТ, речь идет об ИТ в целом, а не только о программировании. Разве вы не знали, что это можно использовать вне кода? Ты можешь! Хорошим примером является Microsoft Excel, где такие функции, как RegExpMatch, RegExpExtract и RegExpReplace, можно использовать во многих случаях. Итак, эту статью не обязательно читать только программистам. Имейте в виду, что хотя этот текст не привязан к конкретному языку или программному обеспечению, я собираюсь продемонстрировать идею, которую я собираюсь использовать с помощью JavaScript и среды выполнения DevTools, чтобы представить и протестировать этот DSL для вас.
Первый вопрос: что такое регулярное выражение? Итак, регулярное выражение — это DSL (язык, специфичный для предметной области), что означает, что это способ выразить что-то посредством его синтаксиса и семантики. Теория замечательная, но давайте посмотрим на нее подробнее.
Глубокое погружение
Представьте, что вам нужно сопоставить следующий список строк в уникальном предложении If-Else: «Я хочу новую книгу», «Я хочу новую КНИГУ» и «Я ХОЧУ НОВУЮ КНИГУ». Еще один момент: вам не разрешено использовать функции UpperCase и LowerCase. Конечно, вы можете найти другие способы сделать это, например, использовать ASCII для сравнения или вычисления равенства, но почему бы не добавить новый элемент под названием regex в наш набор инструментов для ИТ-специалистов? Чтобы решить эту проблему, я могу просто использовать регулярное выражение: /i хочу новую книгу/i. Разве это не обычная строка? Но что это значит? Нет, это не обычная строка, это регулярное выражение. Во-первых, это регулярное выражение можно интерпретировать по тексту, используемому между косыми чертами: «я хочу новую книгу», которая является «ядром» регулярного выражения, то есть тому, что нам нужно сопоставить. Во-вторых, вокруг «ядра» есть две косые черты, и здесь у нас есть важный момент: в зависимости от регистра и языка оно будет использоваться или нет, например:
Языки, в которых регулярные выражения обычно используют косую черту:
- Пример JavaScript:
/regex_pattern/ - Пример Python (с модулем
re):re.search(r'regex_pattern', input_string) - Пример PHP:
preg_match('/regex_pattern/', $input_string) - Пример Perl:
$input_string =~ /regex_pattern/ - Пример Ruby:
/regex_pattern/ - Пример Java (с классом
Pattern):Pattern.compile("regex_pattern")
Языки, которые обычно не используют косую черту вокруг регулярных выражений:
- Пример C#:
Regex.Match(input_string, "regex_pattern") - Пример C++ (с библиотекой
<regex>):std::regex regex_pattern("regex_pattern"); - Пример C (с использованием библиотеки регулярных выражений POSIX):
regcomp(®ex_pattern, "regex_pattern", 0) - Пример Swift (с классом
NSRegularExpression):NSRegularExpression(pattern: "regex_pattern", options: [])
Итак, на данный момент вы можете уловить идею, но а «i» в конце регулярного выражения? Это флаг, в данном случае он представляет собой «нечувствительный регистр», что означает, что регулярное выражение должно игнорировать разницу между верхним и нижним регистром. Хотя вы можете использовать этот шаблон для представления флагов в JavaScript, вы должны знать, что флаги можно использовать таким образом в других языках или технологиях!
Если вы поняли все вышеизложенное, теперь вам нужно узнать о конкретных символах, которые вы обычно можете использовать в своем регулярном выражении. Когда они вместе, их обычно называют Шаблон регулярного выражения. Чтобы помочь вам, я разделю их на категории:
Текст
- [a-z]Прописные буквы
- [A–Z] Строчные буквы
- [0–9] Числа
Количество
- + Означает один или несколько
- {n Указывает количество (n — число)
Знаки
- ^ Начать
- $Конец
Специальный
- . Любая клавиша
- \SЛюбой ключ, кроме пробела
- \sПустое пространство
Позвольте мне привести вам простой пример:
Напишите шаблон регулярного выражения, соответствующий «CCC-4444».
Ответ:/^[A-Z]{3}-[0–9]{4}$/

В этом примере мы можем видеть все элементы, о которых я рассказал выше. Я не собираюсь объяснять каждый символ, но вот ЧРЕЗВЫЧАЙНО ВАЖНЫЙ СОВЕТ: попробуйте последовательно сопоставить шаблон регулярного выражения, это способ легко понять потенциал регулярное выражение.
Но в каких случаях этот подход может оказаться полезнее конкретного? Давайте еще раз подумаем о другом варианте использования:
Вы являетесь разработчиком WordPress, сайт компании, в которой вы работаете, подвергается хакерским атакам, вам необходимо фильтровать все комментарии, которые могут представлять опасность. Они вставляют ‹script›‹/script› в середину большого текста. Какое регулярное выражение вы бы использовали для сопоставления с этим случаем?
Ответ: /.+‹script›‹\/script›.+/

Секреты и уловки
Как уже упоминалось в начале этой статьи, мы можем использовать шаблоны регулярных выражений не только для программирования, еще одна применимая вещь, которую мы могли бы использовать, — это VS Code IDE. Если вы хотите выполнить поиск (ctrl+f), вам нужно будет щелкнуть звездочку в поле поиска. Эта опция была выделена в разделе после, поэтому следуйте изображениям выше:
До:


После:


Как вы можете видеть в разделе «до», выделенный текст соответствует только общей строке «.» (точка), но во втором случае оно соответствует шаблону регулярного выражения «.».
И это еще не все, что вы можете сделать. Другой вариант использования — использовать это регулярное выражение в NGINX, где мы можем указать место для добавления заголовка, посмотрите пример ниже:
location ~ ^/[a-z][a-z][a-z]/index.html$ {
add_header test test;
}

Я добавил регулярное выражение в местоположения с тремя символами и сказал nginx добавить определенный заголовок в заголовки ответов.
Заключительные слова
Наконец, я хочу дать здесь хороший совет, чтобы помнить обо всех этих концепциях: вам следует попытаться начать использовать регулярные выражения, а не простое сравнение строк, и не только это, но вам нужно вставить этот новый способ работы со строками во всех возможных случаях. В любой момент (и, как вы видите, его можно применять практически во всем) и помните о знаниях своей команды, читаемое должно быть в первую очередь хорошим и конкретным шаблоном. Я также хочу поблагодарить вас за чтение и хотел бы сказать, что я опубликую еще одну статью о группах в регулярных выражениях (важная функция, она может изменить ваш подход к кодированию), и когда она будет опубликована, я настоятельно рекомендую вам прочитать ее, если вам понравилось содержание этого текста. Большое спасибо!