Это связано с обсуждением формализации синтаксиса регулярных выражений. Я видел это поведение с несколькими синтаксическими анализаторами регулярных выражений, поэтому я отметил его язык-агностик.
Возьмите следующее выражение (отрегулируйте его для вашего любимого языка):
replace("input", "(.*)*", "$1")
он вернет пустую строку. Почему?
Более любопытно, выражение replace("input", "(.*)*", "A$1B")
вернет строку ABAB
. Почему двойное пустое совпадение?
Отказ от ответственности: Я знаю об отступах и жадных матчах, но правила, изложенные Джеффри Фридл, говорят, что .*
соответствует все, и что дальнейшее отступление или сопоставление не производится. Тогда почему $1
пусто?
Примечание: сравните с (.+)*
, который возвращает строку ввода. Однако http://regexhero.com показывает, что есть еще два совпадения, что кажется странным по тем же причинам, что и выше.