Примеры определения приоритетов

Если вам потребуется расшифровать сложное регулярное выражение, действуйте так, как действует Perl, и используйте таблицу приоритетов, чтобы разобраться в происходящем. Например, выражение /^fred|barney$/ вряд ли соответствует намерениям программиста. Дело в том, что вертикальная черта альтернативы находится на очень низком уровне приоритета; она разбивает шаблон надвое. Шаблон совпадает либо с fred в начале строки, либо с barney в конце строки. Скорее всего, программист имел в виду выражение /^(fred|barney)$/, которое совпадает со всей строкой, содержащей только слово fred или только слово barney. А с чем совпадет шаблон /(wilma|pebbles?)/ ? Вопросительный знак относится к предыдущему символу2, так что шаблон совпадет с wilma, pebbles или pebble – вероятно, в составе большей строки (так как якоря отсутствуют).

Шаблон /^(\w+)\s+(\w+)$/ совпадает со строкой, содержащей «слово», некоторые обязательные пропуски, а затем другое «слово» – и никаких дополнительных символов до или после. Например, с его помощью можно находить строки вида fred flintstone. Круглые скобки, в которые заключены слова, не нужны для группировки; вероятно, они предназначаются для сохранения частичных совпадений в нумерованных переменных. Пытаясь разобраться в сложном шаблоне, попробуйте добавить круглые скобки, чтобы прояснить приоритет элементов. Не забывайте, что группирующие скобки автоматически становятся сохраняющими; если вам нужно только сгруппировать элементы, используйте несохраняющие скобки.

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

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