Skip to content

regex ru

Alexander Chernyshev edited this page Jun 16, 2022 · 3 revisions

Регулярные выражения (Regular Expressions) - это стандартный язык описания шаблонов поиска и преобразования текста. Часто используются сокращенные названия - RegEx или RegExp. Если приходится часто работать с текстом - однозначно следует выучить регулярные выражения.

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

Некоторые важные заметки по RegEx, которые полезно иметь ввиду:

  • RegEx по умолчанию использует жадные алгоритмы - это часто приводит к тому, что шаблон захватывает больше, чем планировалось. Стоит всегда ограничивать шаблоны.
  • RegEx использует якоря - специальные символы для привязки к позиции. Например, к позиции раздела слов (word breaks), начала строки, и т.п. Якоря используются в очень многих случаях, особенно для сложных шаблонов.
  • Один из главных инструментов RegEx - подстановки / маски. Это специальные обозначения, которые позволяют задать более 1 символа в этой позиции. Вы, скорее всего, знаете маски по другим программам. Например, символ * часто используется в Windows для обозначения любого количества любых символов.
  • RegEx позволяет использовать квантификаторы (количественный определитель) - сколько должно быть повторений.
  • RegEx позволяет использовать "подглядывания" (lookups) - вперед или назад, позитивные (должно быть) или негативные (должно не быть). Условия.
  • RegEx позволяет задавать группы - позиционные или именованные. Потом можно ссылаться на значения этих групп по номеру или имени, внутри этого же шаблона или в операции замены текста.
  • RegEx использует множество специальных символов. Если нужно, чтобы шаблон сработал на один из таких символов - нужно использовать его энкапсуляцию. Для этого используется символ \. Например, | - знак или, но если нужно его найти в тексте, то нужно использовать \|.
  • RegEx позволяет написать одно и то же выражение несколькими способами. Это может помочь обойти другие ограничения. Например, OTLoV использует пробел для разделения отдельных правил в фильтре, поэтому в шаблоне RegEx нельзя просто использовать . Вместо этого можно заменить его \s или даже ..

Есть множество готовых одно-двух страничных сводных листов (cheat sheets) по RegEx - просто загуглить regex cheat sheet и выбрать какой нравится.

Так же есть очень полезные сервисы для наглядной обработки RegEx - это позволяет лучше понять как работает regex. Я предпочитаю сервис regex101.com (необходимо поставить выбор движка на .NET).

Простые, часто используемые вещи:

Шаблон Значение
. Один любой символ
\s Символ пустого места (whiteSpace) - пробел, таб, перевод строки если разрешено опциями. Обратите внимание - маленькая s.
\S НЕ символ пустого места (whiteSpace). Большая S.
\w Символ слова (word) - буквы, цифры, подчеркивание.
[a-z] Один из символов в квадратных скобках. В данном случае любой сивол от a до z нижнего регистра.
[^:] Любой символ, кроме :
.* * квантификатор - любое число (0 или более) предшествующих символов. В данном случае . - любой символ, т.е. .* значит любое количество любых символов.
\w+ + квантификатор - 1 или более предшествующих символов. В данном случае \w - символы слова, т.е. \w+ значит 1 или более символов слова (буквы, цифры, подчеркивание).
[a-zA-Z_]+ то же самое, что \w+.
fail(ure)? ? квантификатор - 0 или 1 предшествующих символов. В данном случае перед ? стоит группа (ure), которая должна совпасть только с ure. Т.е. весь шаблон должен совпасть или с fail или с failure. Но мы не использовали никакие якоря здесь, поэтому в реальности шаблон совпадёт и с fail в слове failed.
^ якорь начала строки. В многостроковом тексте поведение зависит от опций.
\n шаблон на символ новой строки (на самом деле может использоваться несколько видов перевода строки, но OTLoV приводит всё именно к формату \n).
$ якорь конца строки. В многостроковом тексте поведение зависит от опций.
\d{1,5} \d - цифра. {1,5} квантификатор количества от 1 до 5. Т.е. \d{1,5} значит от 1 до 5 цифр.
ab|ba Правило ИЛИ. Или ab, или ba.

Несколько более сложных примеров:

Шаблон Значение
\b(OK|KO)\b \b - разрыв слова (\w только с одной стороны). (...) - группа. OK|KO - правило ИЛИ - или OK, или KO. \b(OK|KO)\b совпадёт с отдельными словами OK или KO, но не сиволами внутри слова OKKIE, т.к. после OK нет разрыва слова.
(?<!no )fail (?<!...) негативное "подглядывание" назад - перед этим не должно быть no . (?<!no )fail совпадёт со словом fail, но не с no fail.
\d*[1-9]\d* Число, состоящее из любых цифр, в котором есть хотя бы 1 не-нулевое значение (не совпадёт с 00000, но совпадёт с 00001).

Для использования найдённых значений в замене (Replacement):

Шаблон Значение
$0 Полное значение текста, совпавшего с шаблоном
$1 Значение первой группы (группа - то, что в скобках; порядок - слева-направо; игнорируются пассивные группы заданные как (?:...))
$2 Значение второй группы
${name} Значение именованной группы с именем name, заданной в шаблоне как (?<name>...)

English Русский

Для пользователя

Разработка шаблонов

Clone this wiki locally