-
Notifications
You must be signed in to change notification settings - Fork 0
regex ru
Регулярные выражения (Regular Expressions) - это стандартный язык описания шаблонов поиска и преобразования текста. Часто используются сокращенные названия - RegEx или RegExp. Если приходится часто работать с текстом - однозначно следует выучить регулярные выражения.
Регулярные выражения легко начать использовать с базовыми шаблонами, но этот язык довольно мощный и сложный, если хочется реально овладеть им.
Некоторые важные заметки по RegEx, которые полезно иметь ввиду:
- RegEx по умолчанию использует жадные алгоритмы - это часто приводит к тому, что шаблон захватывает больше, чем планировалось. Стоит всегда ограничивать шаблоны.
- RegEx использует якоря - специальные символы для привязки к позиции. Например, к позиции раздела слов (word breaks), начала строки, и т.п. Якоря используются в очень многих случаях, особенно для сложных шаблонов.
- Один из главных инструментов RegEx - подстановки / маски. Это специальные обозначения, которые позволяют задать более 1 символа в этой позиции. Вы, скорее всего, знаете маски по другим программам. Например, символ
*
часто используется в Windows для обозначения любого количества любых символов. - RegEx позволяет использовать квантификаторы (количественный определитель) - сколько должно быть повторений.
- RegEx позволяет использовать "подглядывания" (lookups) - вперед или назад, позитивные (должно быть) или негативные (должно не быть). Условия.
- RegEx позволяет задавать группы - позиционные или именованные. Потом можно ссылаться на значения этих групп по номеру или имени, внутри этого же шаблона или в операции замены текста.
- RegEx использует множество специальных символов. Если нужно, чтобы шаблон сработал на один из таких символов - нужно использовать его энкапсуляцию. Для этого используется символ
\
. Например,|
- знак или, но если нужно его найти в тексте, то нужно использовать\|
. - RegEx позволяет написать одно и то же выражение несколькими способами. Это может помочь обойти другие ограничения. Например, OTLoV использует пробел
\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>...)
|