【问题标题】:Kotlin Regex named groups supportKotlin Regex 命名组支持
【发布时间】:2016-09-02 11:44:31
【问题描述】:

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

命名的正则表达式组如下所示:(?<name>...)

【问题讨论】:

    标签: regex kotlin regex-group


    【解决方案1】:

    从 Kotlin 1.0 开始,Regex 类不提供访问 MatchGroupCollection 中匹配的命名组的方法,因为标准库只能使用 JDK6 中可用的正则表达式 API,它也不支持命名组.

    如果您以 JDK8 为目标,您可以使用 java.util.regex.Patternjava.util.regex.Matcher 类。后者提供group方法来获取命名捕获组匹配的结果。

    【讨论】:

      【解决方案2】:

      根据this discussion

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

      Kotlin 1.1 EAP 已经可以试用了。


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

      你必须usekotlin-stdlib-jre8

      【讨论】:

        【解决方案3】:

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

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

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

        dependencies {
            implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
        }
        

        Here 是一个很好的解释

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-07-13
          • 1970-01-01
          • 2022-10-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-11
          • 1970-01-01
          相关资源
          最近更新 更多