如何使用正则表达式在 kotlin 中查找整个单词

tae*_*ung 5 regex kotlin

我想找到字符串中的整个单词。但我不知道如何在kotlin中找到所有单词。我发现的词是[non alpha]cba[non alpha]。我的示例代码如下。

val testLink3 = """cba@cba cba"""
val word = "cba"
val matcher = "\\b[^a-zA-Z]*(?i)$word[^a-zA-Z]*\\b".toRegex()
val ret = matcher.find(testLink3)?.groupValues
Run Code Online (Sandbox Code Playgroud)

但我的源代码的输出是“cba”我的预期值是字符串数组,例如“{cba,cba,cba}”。如何在kotlin语言中找到这个值。

Wik*_*żew 8

您可以使用

val testLink3 = """cBa@Cba cbA123"""
val word = "cba"
val matcher = "(?i)(?<!\\p{L})$word(?!\\p{L})".toRegex()
println(matcher.findAll(testLink3).map{it.value}.toList() )
println(matcher.findAll(testLink3).count() )
// => [cBa, Cba, cbA]
// => 3
Run Code Online (Sandbox Code Playgroud)

请参阅在线 Kotlin 演示

要获取匹配列表,您需要findAll在正则表达式对象上运行该方法,将结果映射到值并转换为列表:

.findAll(testLink3).map{it.value}.toList()
Run Code Online (Sandbox Code Playgroud)

要计算匹配数,您可以使用

matcher.findAll(testLink3).count()
Run Code Online (Sandbox Code Playgroud)

正则表达式演示

  • (?i)- 不区分大小写的修饰符
  • (?<!\\p{L})- 如果紧邻当前位置的左侧有一个字母,则表示匹配失败的负向后查找
  • $word- 你的word变量值
  • (?!\\p{L})- 如果紧邻当前位置的右侧有一个字母,则表示匹配失败的负向前查找。