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示例中它是否正常工作:
我尝试使用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)
有什么不对的吗?
非常感谢任何建议.
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.
| 归档时间: |
|
| 查看次数: |
1548 次 |
| 最近记录: |