Abe*_*bel 21 .net java regex language-agnostic perl
这是因为关于形式化正则表达式语法的讨论.我已经看到了几个正则表达式解析器的这种行为,因此我标记它与语言无关.
采用以下表达式(根据您喜欢的语言调整它):
replace("input", "(.*)*", "$1")
Run Code Online (Sandbox Code Playgroud)
它将返回一个空字符串.为什么?
更奇怪的是,表达式replace("input", "(.*)*", "A$1B")将返回字符串ABAB.为什么双空配对?
免责声明:我知道回溯和贪婪的比赛,但杰弗里弗里德所规定的规则似乎要求.*匹配所有内容,并且没有进行进一步的回溯或匹配.那为什么是$1空的?
注意:与之比较(.+)*,返回输入字符串.然而,http://regexhero.com显示仍有两场比赛,由于与上述相同的原因,这似乎很奇怪.
Tim*_*ker 25
让我们看看发生了什么:
(.*)比赛"input"."input"被捕入群体1.(.*)重复,另一场比赛尝试:(.*)匹配后面的空字符串"input".1,覆盖"input".$1 现在包含空字符串.评论中的一个很好的问题:
然后为什么
replace("input", "(input)*", "A$1B")回归"AinputBAB"?
(input)*比赛"input".它被替换为"AinputB".(input)*匹配空字符串.它被替换为"AB"($1为空,因为它没有参与匹配)."AinputBAB"| 归档时间: |
|
| 查看次数: |
343 次 |
| 最近记录: |