val groups = """(\w+?)(?<num>\d+)""".toRegex().matchEntire("area51")!!.groups as? MatchNamedGroupCollection
if (groups != null) {
println(groups.get("num")?.value)
}
val pattern = Pattern.compile("""(\w+?)(?<num>\d+)""")
val matcher = pattern.matcher("area51")
while (matcher.find()) {
val result = matcher.group("num")
}
5条答案
按热度按时间yv5phkfx1#
根据this discussion,
Kotlin 1.1. https://youtrack.jetbrains.com/issue/KT-12753将支持此功能
Kotlin 1.1 EAP已经可以尝试。
你得去一趟一趟。
wztqucjr2#
从Kotlin1.0开始,
Regex
类不提供访问MatchGroupCollection
中匹配的命名组的方法,因为标准库只能使用JDK6中可用的regex API,JDK6也不支持命名组。如果目标是JDK8,可以使用
java.util.regex.Pattern
和java.util.regex.Matcher
类,java.util.regex.Matcher
类提供group
方法获取命名捕获组匹配结果。kq0g1dla3#
从Kotlin1.4开始,您需要将
groups
的结果转换为MatchNamedGroupCollection
:正如@Vadzim正确注意到的,必须使用
kotlin-stdlib-jdk8
而不是kotlin-stdlib
:Here是一个很好的解释
gk7wooem4#
以上答案对我不起作用,但起作用的是使用以下方法:
fumotvh35#
Kotlin