Я думаю, что вы путаете обратные ссылки, такие как \1
и группы захвата (...)
.
Обратные ссылки предотвращают все виды оптимизаций, делая язык нерегулярным.
Группы захвата делаютмеханизм регулярных выражений проделывает немного больше работы, чтобы запомнить, где начинается и заканчивается группа, но не так плох, как обратные ссылки.
http://www.regular -expressions.info / brackets.html поясняетзахват групп и обратные ссылки на них подробно.
РЕДАКТИРОВАТЬ:
При обратных ссылках, делающих регулярные выражения нерегулярными, рассмотрим следующее регулярное выражение, соответствующее комментариям lua:
/^--(?:\[(=*)\[[\s\S]*?(?:\]\1\]|$)|[^\r\n]*)/
Итак, --[[...]]
- это комментарий, --[=[...]=]
- это комментарий, --[==[...]==]
- это комментарий.Вы можете вкладывать комментарии, добавляя дополнительные знаки равенства в квадратных скобках.
Это не может быть сопоставлено строго обычным языком , поэтому простой конечный автомат не может обработать его в O (n)время - вам нужен счетчик.
Регулярные выражения Perl 5 могут справиться с этим с помощью обратных ссылок.Но как только вам требуется нерегулярное сопоставление с образцом, ваша библиотека регулярных выражений должна отказаться от простого подхода конечного автомата и использовать более сложный, менее эффективный код.