Android Java 正则表达式命名组

8

我想要使用

matcher.group("login");

在Android 8+和Eclipse中,没有Matcher.group(String)的方法。你有没有(内置的)解决方案?

匹配器不是那样工作的。请向我们展示您想从哪个字符串中获取什么。 - TheLostMind
我想要这种正则表达式:(?<login>X) - hanoo
正则表达式来自配置文件,所以我需要命名组。 - hanoo
2个回答

10
Android的Pattern类实现是由ICU提供的,准确来说是ICU4C
在Android中使用的正则表达式实现是由ICU提供的。正则表达式的符号大多是其他Java语言实现的超集。这意味着现有的应用程序通常会按预期工作,但在极少数情况下,Android可能会接受其他实现不接受的正则表达式。
而目前ICU4C不支持命名捕获组。你需要回退到编号捕获组。
ICU不支持命名捕获组。http://bugs.icu-project.org/trac/ticket/5312 如果您真的需要这个功能,您需要编写一个包装器并自己解析表达式以提供命名捕获组功能。

6
我认为我应该分享我找到的解决方案。Github上有一个由Tony Trinh(tony19)编写的绝妙库,使我们能够使用命名正则表达式组。
从项目页面中获取:
“这个轻量级库为Java 5/6(以及Android)添加了对命名捕获组的支持。
这是来自Google Code的named-regexp项目的分支(目前不活跃)。"

https://github.com/tony19/named-regexp

我刚在Android 4.1.1及以上版本上进行了测试,目前一切正常。令我惊喜的是,我可以直接用这个库中的类替换我的Matcher和Pattern导入,并且所有仍然使用编号组的现有正则表达式仍然能够正常工作。 希望这可以帮到你。

你好,如何将这个库嵌入到Android项目中? - MaxB
我想出来了,我添加了依赖项 implementation 'com.github.tony19:named-regexp:0.2.6' - MaxB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接