Регулярные выражения. Стандарт POSIX. Ускоряем работу с документами

Большинство офисных программ (Excel, Word, Notepad++ и т.п.) имеют возможность обрабатывать и изменять введенные данные используя регулярные выражения. Для регулярных выражений зачастую используется Posix. О том как работает этот язык, расшифровка команд и примеры для использования разберем ниже.

Стандарт POSIX также делит регулярные выражения на две категории: BRE (Basic Regular Expressions) и ERE (Extended Regular Expressions).

 

BRE

ERE

метасимволы . и *

метасимволы . и *

якоря ^ и $

якоря ^ и $

группирование символов в скобках (скобки экранируются обратным слэшем)

группирование символов в скобках

квантификаторы \{min,max\}

квантификаторы \{min,max\}

Запоминание и повторное использование \1...\9

квантификаторы + и ? и конструкцию выбора

В стандарте POSIX используется понятие локального контекста (locale) — совокупности параметров, описывающих языковые и культурные правила: формат даты и времени, интерпретация символов активной кодировки и т.д. Это не относится напрямую к регулярным выражениям, но влияет на их функционирование. При работе в локальном контексте с кодировкой UTF-8, принятой почти во всех современных дистрибутивах, корректно обрабатываются символы русского алфавита и их диапазоны, т.е. можно указывать диапазоны [а-я] и [А-Я] в шаблонах поиска.

Метасимволы — символы обладающие какими либо свойствами (обозначающие любой знак, начало или конец строки и т.п.).

Квантификаторы — указатели количества заданных символов:

{6} — символов

{6,8} — от 6 до 8 символов

{5,} — минимум 5 символов

{,m} — не более m символов

* — 0 или любой символ {0,}

+ — минимум 1 символ {1,}

? — 0 или 1 раз {0,1}

 

Якоря

^ — привязка к началу строки

$ — привязка к концу строки

 

Операторы

| - или

 

Селекторы

. — любой символ

[<символы>] — класс символов («любое из»)

[012345789] — соответствует одному цифровому символу из заданного набора;

[аеёиоуыэюя] — соответствует одной из перечисленных гласных букв;

[,.:;] — соответствует одному из символов пунктуации.

[a-zA-Z] или [a-Z] — любая буква от a до z в любом регистре

[^<символы>] — негативный класс символов («любое кроме»)

[^0-9] — соответствует любому символу, кроме цифрового;

[^аеёиоуыэюя] — соответствует любой НЕ гласной букве.

- — обозначение последовательности в классе символов («[0-9]» — цифры)



 

POSIX

подобно

Perl

означает

[:upper:]

[A-Z]

 

символы верхнего регистра

[:lower:]

[a-z]

 

символы нижнего регистра

[:alpha:]

[A-Za-z]

 

символы верхнего и нижнего регистра

[:alnum:]

[A-Za-z0-9]

 

цифры, символы верхнего и нижнего регистра

 

[A-Za-z0-9_]

\w

цифры, символы верхнего, нижнего регистра и "_"

 

[^A-Za-z0-9_]

\W

не цифры, символы верхнего, нижнего регистра и "_"

[:digit:]

[0-9]

\d

цифры

 

[^0-9]

\D

не цифры

[:xdigit:]

[0-9A-Fa-f]

 

шестнадцатеричные цифры

[:punct:]

[.,!?:…]

 

знаки пунктуации

[:blank:]

[ \t]

 

пробел и TAB

[:space:]

[ \t\n\r\f\v]

\s

символы пробелов(пропуска)

 

[^ \t\n\r\f\v]

\S

не символы пробелов(пропуска)

[:cntrl:]

[\x00-\x1F\x7F]

 

символы управления

[:graph:]

[:alnum:] ∪ [:punct:]

 

символы печати

[:print:]

[\x20-\x7E]

 

символы печати и символы пропуска(видимые символы и пробелы)

 

\n - перенос на новую строку

\n\r — Ищет пустые строки

 

Примеры

BRE

ERE

Поиск денежной суммы, записываемой в формате «10000 руб. 00 коп.»

[0-9]\{1,\} руб\. [0-9]\{2\} коп\.

 

Поиска URL-строки, соответствующей Web-ресурсу

http://[a-zA-Z0-9]\{1,\}\.[-a-zA-Z0-9_]\{1,\}/*

http://[a-zA-Z0-9]+\.[-a-zA-Z0-9_]+/*

Шаблон для поиска любого HTML-тэга

 

<[^>]+>

Вариант шаблона для поиска современных дат

 

[12]?[0-9] (янв|фев|мар|апр|мая|июн|июл|авг|сен|окт|ноя|дек).* [0-9][0-9][0-9][0-9] г\.

Поиск пятибуквенных палиндромов (например, level, rotor, madam и т.д.)

\([a-z]\)\([a-z]\)[a-z]\2\1

 

Поиск шестибуквенных палиндромов (например, redder, succus, terret и т.д.)

\([a-z]\)\([a-z]\)\([a-z]\)\3\2\1

или

\(.\)\(.\)\(.\)\3\2\1

 

Поиск стоящих рядом повторяющихся слов

\<\(..*\)\> \<\1\>

 

Ограничение размера совпадающей части шаблона

 

"[^"]*"

 

BRE



 

ERE

 

Пример с васей

("Вася(.*)Пупкин") - все символы между Васей Пупкиным

[0-9]{6} - 6 символов от 0 до 9

[0-9]{6,8} - от 6 до 8 цифр