Обратная ссылка перед ассоциированной группой - PullRequest
1 голос
/ 22 апреля 2019

В расширенном регулярном выражении с обратными ссылками допустимо ли иметь обратную ссылку перед связанной группой?

Например, имеет ли смысл шаблон \1(a) и чему он соответствует?

Ответы [ 2 ]

2 голосов
/ 22 апреля 2019

Regex \1(a) само по себе не приводит к совпадению в вариантах regex, которые поддерживают прямую ссылку . Зачем? потому что упомянутая группа захвата еще не обработана. Но они что-то значат при использовании в количественном кластере, например (...)+. Практическое использование прямых ссылок - это попытка сопоставить вложенные скобки .

если вы пишете движок регулярных выражений, должны ли вы отклонять такие шаблоны во время компиляции? Должны ли они быть приняты, но никогда не соответствуют ничего?

Нет абсолютного ответа на это. JavaScript не поддерживает прямые ссылки, но и не жалуется на это. Вместо этого он соответствует позиции нулевой длины. Boost engine выдает ошибку, и PCRE обрабатывает ее по-другому.

Если обратная ссылка обрабатывается как пустая строка, следовательно, этот шаблон будет соответствовать a?

Это случай с JS. На самом деле не существует стандарта, определенного для такого поведения. Это все особенности двигателей, которые кто-то когда-то решил внедрить в свой вкус.

0 голосов
/ 22 апреля 2019

\1(a) действителен , однако он может ничего не возвращать. Существуют утверждения, которые иногда полезны для реализации определенного трюка, но, возможно, их нельзя использовать в их первоначальных целях.

(?:\1(a)|(a))

enter image description here

Этот RegEx может быть грубым примером:

\??

enter image description here

...