Содержание
Это приложение содержит краткое, но достаточно ёмкое описание регулярных выражений в той форме, в которой они используются в KatePart (они не совместимы с регулярными выражениями perl и grep).
Регулярные выражения — это средство, позволяющее описывать содержание строк в некотором формализованном виде, что позволяет приложениям определять принадлежность той или иной строки определённому формату. В дополнение ко всему некоторые приложения могут сохранять части совпавшей строки для их последующего использования.
Приведём небольшой пример. Допустим, требуется найти в тексте все абзацы, которые начинаются с фамилий «Петров» или «Иванов», за которыми следует любая форма глагола «рассказывать» (для чистоты эксперимента возьмём всего две формы: «рассказал» и «рассказывал»).
С помощью обычного поиска понадобилось бы сначала найти фамилию «Петров», возможно, дополненную буквами «рассказ», что-то вроде этого: Петров рассказ. При поиске совпадений пришлось бы пропускать все строки, которые стоят не в начале абзаца. После этого последовал бы повторный поиск для второй фамилии...
Регулярные выражения позволяют произвести такую операцию поиска за один раз, причём с гораздо большей точностью.
Регулярные выражения содержат правила, позволяющие точно выразить вид строки для поиска. Приведённый пример возможно выразить словесно: «Строка, начинающаяся со слов „Петров“ или „Иванов“, перед которыми могут стоять до четырёх пробелов или символов табуляции, после фамилии должен стоять пробел, за пробелом — „рассказ“, после чего может (необязательно!) стоять суффикс „ыв“, и, наконец, суффикс „ал“». Это возможно записать в форме регулярного выражения:
^[ \t]{0,4}(Петров|Иванов) рассказ(ыв)?ал
Этот пример демонстрирует четыре основных понятия современных регулярных выражений:
Шаблоны
Утверждения
Кванторы
Обратные ссылки
Знак ^, с которого начинается выражение, — это утверждение, которое подтверждает совпадение только в том случае, если совпавшая цепочка символов начинается с новой строки.
[ \t] и (Петров|Иванов) рассказ(ыв)?ал — это шаблоны. Первый представляет собой символьный класс, который совпадает либо с пробелом, либо с символом табуляции. Второй содержит вложенный шаблон, совпадающий со словами Петров или Иванов, затем идёт проверка на точное совпадение со строкой рассказ, потом ещё один вложенный шаблон, который определяет вхождение символов ыв, и, в самом конце, проверка на точное совпадение с символами ал
Строка {0,4} и символ вопроса после вложенного шаблона (ыв) — это кванторы. Первый интерпретируется следующим образом: «возможен повтор предыдущего символа от 0 до 4 раз». Второй квантор действует аналогично, позволяя повторить стоящий перед ним вложенный шаблон 0 или 1 раз.
Все приложения, работающие с регулярными выражениями и поддерживающие обратные ссылки, при совпадении сохраняют всю строку и вложенные шаблоны в некоторой области памяти и предоставляют средства для получения этих значений. Поэтому возможно получить всю совпавшую строку (при поиске в редакторе она обычно выделяется цветом) или, например, только фамилию.
Как было показано в предыдущем примере, регулярные выражения — это очень эффективное средство поиска, позволяющее найти именно то, что требуется, без особых усилий.
В следующих разделах подробно рассмотрены шаблоны, символьные классы, утверждения, кванторы и обратные ссылки. В конце этой главы приведено несколько полезных примеров.