我有一些代码:
void main() {
RegExp re = new RegExp(r".*(a+)+\d");
print("a0aaaaaaaaaaaaa".contains(re));
print("a0aaaaaaaaaaaaaa".contains(re));
}
输出:
true
false
为什么?我希望两者都是对的。
编辑:
我提交了一个错误报告:
https://code.google.com/p/dart/issues/detail?id=19193
最佳答案
该行为绝对是一个错误。
在JS RegExp实现中,这可能是常见的故意错误。如果RegExp运行时间“太长”,则某些实现会放弃并声称不匹配。
我猜(因为我还没有检查过),是因为RegExp花费的时间太长而无法完成VM的RegExp实现。有问题的RegExp看起来很像将导致灾难性的回溯(占用输入长度的指数时间)。这就可以解释为什么增加长度会导致它突然放弃并说不匹配,即使很明显它应该匹配。
关于regex - 为什么Dart(不)匹配此RegEx?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24027524/