我有以下正则表达式模式,它在 Android Studio 中抛出错误 This named group syntax is not supported.
Pattern pattern = Pattern.compile("(?<new>network=\\{|(?!^)\\G)\\s*(?<key>\\w+)=\"?(?<value>[^\"\n]+)\"?");
但在 Ideone 示例中是否有效:
我尝试使用 Java 的正则表达式测试来解决它
http://www.regexplanet.com/advanced/java/index.html
然后出现以下错误:
Illegal repetition near index 17 "(?<new>network=\\{|(?!^)\\G)\\s*(?<key>\\w+)=\"?(?<value>[^\"\n]+)\"?"
请问有什么问题吗?
非常感谢您的任何建议。
最佳答案
Android 通过围绕 ICU4C 编写包装器来实现 Pattern
类。在 ICU 55 之前,ICU4C 不支持命名捕获组.
在回答时(2015 年 9 月 25 日),Android 代码库是 stuck at ICU 49.1.1在撰写本文时的最新标签 (android-5.1.1_r18) 上,因此正则表达式无法编译。从那以后,安卓就有了updated to ICU 55.1在 marshmallow-release 分支中,因此正则表达式应该从这个版本的 Android 编译。但是,即使正则表达式编译成功,如果不更改 Java 端的 API,您也无法通过名称寻址捕获组。
现在,只需编写不带命名组的正则表达式,并按正常方式按组号提取匹配的内容:
Pattern.compile("(network=\\{|(?!^)\\G)\\s*(\\w+)=\"?([^\"\n]+)\"?");
您可以分别访问编号为1、2、3的组new
、key
、value
。
关于java - Android Studio 中的正则表达式模式抛出错误 : This named group syntax is not supported,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32776168/