You need to enable JavaScript to run this app. Kotlin正则表达式无法匹配VERSION_ID值及多行匹配方案求助
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin正则表达式无法匹配VERSION_ID值及多行匹配方案求助

问题原因
  • 缺失双引号匹配规则:你的目标文本中VERSION_ID=之后紧跟双引号",你写的正则直接接数字匹配规则,自然无法命中。
  • 注意Kotlin字符串转义规则:如果用普通双引号包裹正则字符串,\d的反斜杠需要额外转义为\\d,否则会触发Kotlin非法转义字符报错;如果用Kotlin原生字符串(三个双引号"""包裹)则不需要转义反斜杠。
修正方案

通用写法(适配单/多行场景)

你需要匹配的是固定前缀的单行内容,默认的正则搜索逻辑已经可以在多行文本中命中目标,修正后的正则代码如下:

// 使用原生字符串避免转义,补充双引号匹配规则
private val myRegex = Regex("""VERSION_ID="(\d+\.\d+)"""")

如果需要单独提取大版本和小版本,可以拆分分组:

private val myRegex = Regex("""VERSION_ID="(\d+)\.(\d+)"""")

如果需要严格匹配行首的VERSION_ID字段,避免其他位置出现相同字符串导致误匹配,可以开启多行模式:

// (?m) 是内置多行模式标记,让^匹配每一行的行首
private val myRegex = Regex("""(?m)^VERSION_ID="(\d+\.\d+)"""")
提取结果示例
val inputText = """
NAME="SLED"
VERSION="12-SP2"
VERSION_ID="12.2"
PRETTY_NAME="SUSE Linux Enterprise Desktop 12 SP2"
ID="sled"
ID_LIKE="suse"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:suse:sled:12:sp2"
""".trimIndent()

myRegex.find(inputText)?.let { matchResult ->
    // 取分组1得到完整的版本号 12.2
    val versionId = matchResult.groupValues[1]
    println(versionId)

    // 如果用拆分分组的写法,可以分别取大小版本
    // val majorVersion = matchResult.groupValues[1] // 12
    // val minorVersion = matchResult.groupValues[2] // 2
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 21:54:05