Вы уже использовали контрольные глаголы Perl 5.10 backtracking в своих регулярных выражениях?

Вы уже использовали контрольные глаголы Perl 5.10 backtracking в своих регулярных выражениях? И какие проблемы они помогли вам достичь?


Как и в прошлом: я немного поработал, но я не могу получить действительно полезные результаты.

В качестве сравнения, когда я начал получать то, что сделал группа (?>, он начал отображаться больше в моих регулярных выражениях. Мне понравилась идея настройки мира регулярного выражения Perl на определенный набор предположений. По мере того, как языки RE становятся более популярными, обратное отслеживание делает работу REs дико отличающейся от скудной и средней FSA, на которой они основывались.


Когда кто-то может сказать мне, что в другой реализации REs есть контрольные глаголы с возвратом - и PCRE этого не делает, я могу признать, что он принадлежит к общей области знаний людей, знающих о регулярных выражениях. Это вопрос с регулярным выражением Perl, и ребята, помогающие людям с Ruby, Python, С#, Javascript или любыми реализациями PCRE-клиента, вероятно, не могут помочь или считать это пустой тратой для тегов, которые они обычно читают.

Ответ 1

Да, у меня есть, хотя и не слишком много. Я использую их для управления обратным трассированием, обычно для того, чтобы заставить его делать больше перестановок. Heres забавное решение и heres практический.

Ответ 2

Прошло много лет с тех пор, как я сделал любое программирование на Perl, поэтому я даже не знал об этой функции, пока вы не упомянули об этом. Это похоже на одну из тех хардкорных функций, которые будут использовать только гуру-регексы (конечно, в сообществе Perl их много). С другой стороны, Perl 6 Grammars выглядят так, как будто с ними будет очень весело играть.

На данный момент я доволен атомными группами и притяжательными кванторами. Фактически, я практически зависим от них. Это дошло до того, что я рефлексивно пытаюсь писать регулярные выражения таким образом, чтобы они никогда не возвращались. Я должен иногда напоминать себе, что возвращение в норму в небольших дозах, и это не стоит усилий, чтобы полностью устранить его.

p.s. Насколько мне известно, притяжательные квантификаторы поддерживаются только Java, PCRE (PHP, Apache, Flex 3/ActionScript 3) и механизмом регулярного выражения JGSoft, используемым RegexBuddy, EditPad Pro и PowerGrep.

update: аромат Oniguruma (используемый в Ruby 1.9+ и TextMate) поддерживает как атомные группы, так и собственные квантификаторы. И, конечно же, Perl 5.10 поддерживает их в дополнение к глаголам с обратным следом.

Ответ 3

Честно говоря, я еще даже не использовал 5.10. Как и некоторые новые функции, я использую их только в личных сценариях. Для производства я нацелен на совместимость с 5.8. Для CPAN я - цель 5.6. Это остановило меня от игры с большинством новых игрушек.

Функции контроля обратного отслеживания интересны, но я не вижу много приложений вне парсеров. Я не могу представить, чтобы весь парсер был в одном регулярном выражении. (Даже если они поддерживают рекурсию сейчас!) Я гораздо больше волнуюсь о грамматиках Perl6.