Android的Pattern类实现是由ICU提供的,准确来说是ICU4C。在Android中使用的正则表达式实现是由ICU提供的。正则表达式的符号大多是其他Java语言实现的超集。这意味着现有的应用程序通常会按预期工作,但在极少数情况下,Android可能会接受其他实现不接受的正则表达式。而目前ICU4C不支持命名捕获组。你需要回退到编号捕获组。ICU不支持命名捕获组。http://bugs.icu-project.org/trac/ticket/5312 如果您真的需要这个功能,您需要编写一个包装器并自己解析表达式以提供命名捕获组功能。
我认为我应该分享我找到的解决方案。Github上有一个由Tony Trinh(tony19)编写的绝妙库,使我们能够使用命名正则表达式组。从项目页面中获取:“这个轻量级库为Java 5/6(以及Android)添加了对命名捕获组的支持。这是来自Google Code的named-regexp项目的分支(目前不活跃)。" https://github.com/tony19/named-regexp 我刚在Android 4.1.1及以上版本上进行了测试,目前一切正常。令我惊喜的是,我可以直接用这个库中的类替换我的Matcher和Pattern导入,并且所有仍然使用编号组的现有正则表达式仍然能够正常工作。 希望这可以帮到你。