Kotlin Regex任命团体支持

gs_*_*lad 11 regex regex-group kotlin

Kotlin是否支持命名的正则表达式组?

命名的正则表达式组看起来像这样: (?<name>...)

Vad*_*zim 15

根据这个讨论,

这将在Kotlin 1.1中得到支持. https://youtrack.jetbrains.com/issue/KT-12753

Kotlin 1.1 EAP已经可以试用了.


"""(\w+?)(?<num>\d+)""".toRegex().matchEntire("area51")!!.groups["num"]!!.value
Run Code Online (Sandbox Code Playgroud)

你必须使用 kotlin-stdlib-jre8.


Ily*_*lya 7

从Kotlin 1.0开始,Regex该类没有提供访问匹配的命名组的方法,MatchGroupCollection因为标准库只能使用JDK6中可用的regex api,它也不支持命名组.

如果您定位JDK8,则可以使用java.util.regex.Patternjava.util.regex.Matcher类.后者提供group了获取命名捕获组匹配结果的方法.


bds*_*dow 5

从 Kotlin 1.4 开始,您需要将结果转换为groupsto MatchNamedGroupCollection

val groups = """(\w+?)(?<num>\d+)""".toRegex().matchEntire("area51")!!.groups as? MatchNamedGroupCollection 
if (groups != null) {
    println(groups.get("num")?.value)
}
Run Code Online (Sandbox Code Playgroud)

正如@Vadzim 正确注意到的那样,您必须使用kotlin-stdlib-jdk8而不是kotlin-stdlib

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
}
Run Code Online (Sandbox Code Playgroud)

是一个很好的解释