这源于关于形式化正则表达式语法的讨论。我已经使用几个正则表达式解析器看到了这种行为,因此我将其标记为与语言无关。
采用以下表达式(根据您喜欢的语言进行调整):
replace("input", "(.*)*", "$1")
它将返回一个空字符串。为什么?
更奇怪的是,表达式replace("input", "(.*)*", "A$1B")
将返回字符串ABAB
。为什么是双空匹配?
免责声明:我知道回溯和贪婪匹配,但Jeffrey Friedl制定的规则似乎要求.*
匹配所有内容,并且不再进行回溯或匹配。那为什么是$1
空的?
注意:与 比较(.+)*
,它返回输入字符串。但是,http://regexhero.com显示仍然有两个匹配项,出于与上述相同的原因,这似乎很奇怪。