在 Kotlin 中使用正则表达式查找字符串中的一个或多个单词

ola*_*tre 4 regex kotlin

我正在 Kotlin 中使用 Regex 编写一种方法,检查字符串是否包含一个或多个特定代词(例如“I”、“we”、“you”等)。例如,“我们是一家科技公司”应该是匹配的,“网络是为蜘蛛准备的”不应该是匹配的。

我尝试使用以下代码:

fun main() {
    val text = "We are testing!"
    val regex = "/\b(i|you|we)\b/g".toRegex()
    if (regex.containsMatchIn(text.lowercase())) {
        println("match")
    } else {
        println("no match")
    }
}
Run Code Online (Sandbox Code Playgroud)

,但它打印“不匹配”。

Wik*_*żew 7

Kotlin(和 Java)正则表达式是用字符串文字定义的,而不是正则表达式文字,即当您在模式的/开头和/g(或仅/)末尾添加时,您实际上将它们添加到模式字符串中。

您可以使用以下修复:

val text = "We are testing!"
val regex = """(?i)\b(i|you|we)\b""".toRegex()
if (regex.containsMatchIn(text)) {
    println("match")
} else {
    println("no match")
}
Run Code Online (Sandbox Code Playgroud)

等于"""(?i)\b(i|you|we)\b""""(?i)\\b(i|you|we)\\b"前者将反斜杠视为文字字符。

请注意,您不需要使用.lowercase()(?i)不区分大小写修饰符将使匹配不区分大小写。

请参阅在线 Kotlin 演示