java - Android Studio 中的正则表达式模式抛出错误 : This named group syntax is not supported

标签 java android regex android-studio

我有以下正则表达式模式,它在 Android Studio 中抛出错误 This named group syntax is not supported.

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

但在 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]+)\"?" 

请问有什么问题吗?

非常感谢您的任何建议。

最佳答案

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的组newkeyvalue

关于java - Android Studio 中的正则表达式模式抛出错误 : This named group syntax is not supported,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32776168/

相关文章:

C++。如何使用 std::regex 替换括号(和括号)内的任何内容?

java - JPA criteriabuilder where 语句

java - 我可以在简单的 Meecrowave 项目中结合 REST 类和静态资源吗?

android - 处理服务上的 onActivityResult

android - 无法访问文件 :///android_asset 中的文件

java - 这些类似的 Java 正则表达式之间有什么区别?

java - Spring 将 ModelMap 模型属性传递给 JSP

客户端重新连接到服务器后,从服务器向客户端发送 Java 消息

android - 如何检测操作系统或设备类型等系统信息

python - 如何识别包含多个单词的字符串