当前位置: 首页 > 知识库问答 >
问题:

静态编程语言Regex命名组支持

澹台华翰
2023-03-14

静态编程语言是否支持已命名的regex组?

命名的regex组看起来像这样:(?


共有3个答案

朱鹤轩
2023-03-14

从Kotlin 1.4开始,您需要将组的结果转换为匹配名称组集合

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"
}

这里有一个很好的解释

周良弼
2023-03-14

从静态编程语言1.0开始,Regex类不提供访问MatchGroupCollection中匹配的命名组的方法,因为标准库只能使用JDK6中可用的regex api,这也不支持命名组。

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

傅阿苏
2023-03-14

根据这个讨论,,

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

Kotlin 1.1 EAP已经可以试用。

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

您必须使用kotlin-stdlib-jre8

 类似资料:
  • 我正在尝试使用柯特林 V1.2.70、Gradle V4.10.1 和 Java 11。使用 gradle 编译项目时,出现错误,指出“未知的 JVM 目标版本:11。支持的版本:1.6,1.8“。 Kotlin 编译器是否支持 Java 11(生成与 Java 11 JVM 兼容的代码)?如果是这样,如何使用渐变配置?

  • 我试图用OkHttp和Cucumber在静态编程语言中设置一个Spring启动项目,并且在运行Cucumber任务时遇到以下错误。如何修复? 还有build gradle kts片段 我看到了这个错误https://github.com/square/okio/issues/647看起来可能是它,并修复了这个build.gradle,我如何将其翻译为kotlinbuild.gradle.kts?

  • 如图所示,https://stackoverflow.com/a/16639438/8949356,在Java中,当声明的类是公共类时,可以重写其函数 但是我想知道如何用静态编程语言编写完全相同的代码,我已经尝试了很多,但没有找到任何关于这个主题的东西。我可以在Java中去做这件事,但我的其余代码是用静态编程语言编写的,而且我不能一直带着这种怀疑;静态编程语言对我来说是一个很好的工具,我想学习它。

  • 这两个代码片段有什么区别?以及如何决定使用哪一个? 和 有了这两个代码,我可以像这样通过索引访问它

  • 上周我更新了Kotlin 1.5,昨天看到谷歌打算让Jetpack成为设计UI的首选选项后,我想做一些测试。 问题是将我的项目更新为静态编程语言1.5,当尝试构建项目时,我得到以下错误: 静态编程语言1.5与Jetpack Compose不兼容吗?在谷歌搜索问题后,我找到了版本,其中提到了Jetpack Compose,但不是以“不兼容”的方式。 你对此有任何答案吗?我应该使用吗?在这种情况下,我

  • 刚开始和Kotlin合作我很喜欢但是。。。我无法理解这种语言中的列表和数组。我对编程并不陌生,也不需要解释数组是什么。我不明白的是。 > 列表和数组之间有什么区别?它们看起来非常相似,您可以使用[索引]访问它们,也可以以几乎相同的方式使用它们。如果一个列表是不可变的,那么它们就更加相同了,所以。。。有什么区别?假设列表不是链表,它们都在O(1)访问时间内工作。 如果我使用列表;可变和不可变之间有什