Регулярные выражения. Стандарт POSIX. Ускоряем работу с документами
Отредактировано: 19 Сентября 2017
Большинство офисных программ (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] — соответствует любому символу, кроме цифрового;
[^аеёиоуыэюя] — соответствует любой НЕ гласной букве.
- — обозначение последовательности в классе символов
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 цифр