regex - 为什么Dart(不)匹配此RegEx?

标签 regex dart

我有一些代码:

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/

相关文章:

javascript - Contenteditable 正则表达式空格不起作用

java - 如何拆分仅包含定界符的字符串?

flutter - 如何使用dart读取复杂的嵌套json文件

dart - @Component viewBindings已过时,该怎么用呢?

import - Dart ,少和@import:FileError: 'file.less'未找到

java - 当不同行在不同位置有空格时如何拆分基于空格的记录

c# - 突出显示字符串中的搜索词

dart - 如何从 Dart 的 map 中选择随机元素?

mysql - ORDER BY 在 MYSQL 中使用 REGEXP

flutter - 如何从 List<Map<String, dynamic>> 在 Flutter 中获取值