Приоритеты

Мы рассмотрели целый ряд метасимволов и служебных конструкций; но в каком порядке они должны обрабатываться в регулярных выражениях? Ниже приведена таблица приоритетов, которая показывает, какие части шаблонов наиболее плотно «прилегают» друг к другу. В отличие от таблицы приоритета операторов, таблица приоритетов элементов регулярных выражений проста; она состоит всего из четырех уровней.

1. На верхнем уровне иерархии приоритетов находятся круглые скобки (()), используемые для группировки и сохранения. Все содержимое круглых скобок «прилегает друг к другу» плотнее, чем какие-либо внешние элементы.

2. На втором уровне находятся квантификаторы, то есть операторы повторения: звездочка (*), плюс (+) и вопросительный знак (?), а также квантификаторы в фигурных скобках вида {5,15}, {3,} и {5}. Они всегда «прилегают» к предшествующему элементу.

3. На третьем уровне иерархии находятся якоря и последовательности. К первой категории относятся: якорь начала строки (^), якорь конца строки ($), якорь границы слова \b и якорь «неграницы слова» \B. Последовательность (размещение одного элемента за другим) в действительности тоже является оператором, хотя и не использует специальные метасимволы.


Это означает, что буквы в слове «прилегают» друг к другу так же плотно, как и якоря прилегают к буквам.

4. На нижнем уровне иерархии находится вертикальная черта (|), обозначающая альтернативу. Фактически альтернатива «нарезает» шаблон на части. Она обладает низшим приоритетом, потому что буквы в словах выражения /fred|barney/ «прилегают» друг к другу плотнее, чем альтернативные части. Если бы альтернатива обладала более высоким приоритетом, этот шаблон означал бы поиск совпадения для fre, за которым следует буква d или b, с продолжением arney. Соответственно альтернатива находится в самом низу иерархии, а буквы имен рассматриваются как единое целое.

5. Далее идут так называемые атомы, составляющие самые элементарные части шаблонов: отдельные символы, символьные классы и обратные ссылки.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Perl на эту тему:
Автоматические переменные совпадения
Границы слов
Добавление пропусков (/x)
Другие модификаторы
Жизненный цикл переменных частичных совпадений