Android studio中的正则表达式模式引发错误:不支持此命名组语法

red*_*rom 2 java regex android android-studio

我有以下正则表达式模式,它在Android Studio中抛出错误不支持此命名组语法.

Pattern pattern = Pattern.compile("(?<new>network=\\{|(?!^)\\G)\\s*(?<key>\\w+)=\"?(?<value>[^\"\n]+)\"?");
Run Code Online (Sandbox Code Playgroud)

但在Ideone示例中它是否正常工作:

http://ideone.com/rMLk3K

我尝试使用Java的正则表达式测试来解决它

http://www.regexplanet.com/advanced/java/index.html

并且我得到以下错误:

Illegal repetition near index 17 "(?<new>network=\\{|(?!^)\\G)\\s*(?<key>\\w+)=\"?(?<value>[^\"\n]+)\"?" 
Run Code Online (Sandbox Code Playgroud)

有什么不对的吗?

非常感谢任何建议.

nha*_*tdh 7

Android Pattern通过在ICU4C周围编写包装来实现该类.在ICU 55之前,ICU4C不支持命名捕获组.

在回答时(2015年9月25日),在编写本文时,Android代码库在最新标签上停留在ICU 49.1.1(android-5.1.1_r18),因此正则表达式无法编译.从那时起,Android已经在marshmallow-release分支中更新到ICU 55.1,因此正则表达式应该从这个版本的Android编译.但是,即使正则表达式编译,而不更改Java端的API,您也无法按名称寻址捕获组.

现在,只需编写没有命名组的正则表达式,并按照正常情况按组编号提取匹配的内容:

Pattern.compile("(network=\\{|(?!^)\\G)\\s*(\\w+)=\"?([^\"\n]+)\"?");
Run Code Online (Sandbox Code Playgroud)

可以访问组new,key,value在组分别编号为1,2,3.