You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 10环境下无法通过名称获取正则匹配结果问题咨询

解决Java 10下Kotlin无法通过名称获取正则匹配组的问题

你遇到的这个问题,本质是早期Kotlin版本对JDK 9+的正则命名组支持存在兼容性bug。从报错堆栈能看到,Kotlin的JDK8PlatformImplementations类错误地判定当前JDK平台不支持命名组检索,但实际上Java 10完全支持该特性(Java 7就已经引入了正则命名组)。

下面给你两个可行的解决方案:

方案一:升级Kotlin版本

早期的Kotlin(比如1.2及更早版本)的JDK适配代码只针对JDK 8做了处理,没有考虑JDK 9+的情况。升级到Kotlin 1.3或更高版本后,Kotlin会自动适配JDK 9+的环境,修复这个判定错误,你可以正常使用Kotlin封装的groups属性来获取命名组的值。

方案二:直接使用Java原生Matcher API

如果暂时无法升级Kotlin版本,你可以绕过Kotlin的封装,直接调用Java Matcher类的group(String name)方法来获取命名组内容,这是最直接且可靠的方式,示例代码如下:

import java.util.regex.Pattern

fun main() {
    val regexPattern = Pattern.compile("(?<username>[a-z0-9]+)@(?<domain>[a-z]+\\.com)")
    val matcher = regexPattern.matcher("john@example.com")
    
    if (matcher.find()) {
        // 直接调用Java原生方法获取命名组
        val username = matcher.group("username")
        val domain = matcher.group("domain")
        println("用户名:$username,域名:$domain")
    }
}

这段代码会正常输出:用户名:john,域名:example.com,不会抛出异常。

内容的提问来源于stack exchange,提问作者Florian Reisinger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:50:59