Regex \1(a)
само по себе не приводит к совпадению в вариантах regex, которые поддерживают прямую ссылку . Зачем? потому что упомянутая группа захвата еще не обработана. Но они что-то значат при использовании в количественном кластере, например (...)+
. Практическое использование прямых ссылок - это попытка сопоставить вложенные скобки .
если вы пишете движок регулярных выражений, должны ли вы отклонять такие шаблоны во время компиляции? Должны ли они быть приняты, но никогда не соответствуют ничего?
Нет абсолютного ответа на это. JavaScript не поддерживает прямые ссылки, но и не жалуется на это. Вместо этого он соответствует позиции нулевой длины. Boost engine выдает ошибку, и PCRE обрабатывает ее по-другому.
Если обратная ссылка обрабатывается как пустая строка, следовательно, этот шаблон будет соответствовать a
?
Это случай с JS. На самом деле не существует стандарта, определенного для такого поведения. Это все особенности двигателей, которые кто-то когда-то решил внедрить в свой вкус.