为何Dart中的此正则表达式会抛出FormatException?
错误原因解析
你的正则表达式触发FormatException的核心原因是:Dart的RegExp引擎不支持PCRE风格的条件正则结构。
你写的正则里的(?(?<=i:)(\d+)|())是Perl兼容正则(PCRE)特有的条件匹配语法,逻辑是“如果当前位置前是i:,则匹配一串数字,否则匹配空内容”。但Dart的正则实现基于ECMAScript标准,并不支持这种条件分组的语法,所以创建RegExp实例时会被判定为无效分组,抛出错误。
补充说明:你在测试平台上应该选择了PCRE模式,所以该正则能正常解析,但Dart的正则引擎不兼容该模式的扩展语法。
另外提一句:你的正则里[a|i|r]的写法有冗余,字符组内的|会被当作普通字符处理,正确写法是[air],不过这不是本次报错的直接原因。
内容的提问来源于stack exchange,提问作者jvndev
相关产品推荐
相关产品推荐

