📜  Kotlin 正则表达式(1)

📅  最后修改于: 2023-12-03 15:02:32.802000             🧑  作者: Mango

Kotlin 正则表达式

正则表达式(Regular Expression,缩写成Regex或RegExp)是一种用于描述字符串模式的方法。它可以用于匹配、查找和替换文本,以及验证字符串是否符合某种格式要求。在Kotlin中,可以使用Regex类来创建正则表达式对象,并使用其方法来进行操作。

创建正则表达式

Kotlin中的正则表达式可以使用双引号或三引号来创建。双引号中的反斜杠会被转义,因此要表示一个反斜杠本身,需要使用两个反斜杠。三引号可以用于创建多行字符串,其中的反斜杠不需要转义。

使用双引号创建正则表达式
val pattern = "\\d+"
val regex = Regex(pattern)
使用三引号创建正则表达式
val pattern = """\d+"""
val regex = Regex(pattern)
匹配文本

一旦创建了正则表达式对象,就可以使用其matchEntirefindfindAll方法来进行匹配。

matchEntire方法用于匹配整个字符串,只有整个字符串都匹配时才返回MatchResult对象,否则返回null。

val text = "12345"
val pattern = "\\d+"
val regex = Regex(pattern)
val result = regex.matchEntire(text)
println(result?.value) //输出:12345

find方法用于在字符串中查找匹配的部分,返回第一个MatchResult对象。

val text = "1a2b3c4d5e"
val pattern = "\\d+"
val regex = Regex(pattern)
val result = regex.find(text)
println(result?.value) //输出:1

findAll方法用于查找字符串中所有匹配的部分,返回一个Sequence<MatchResult>

val text = "1a2b3c4d5e"
val pattern = "\\d+"
val regex = Regex(pattern)
for (result in regex.findAll(text)) {
    println(result.value)
}
//输出:
//1
//2
//3
//4
//5
替换文本

使用正则表达式可以对文本进行替换和修改。

replace方法用于替换第一个匹配的字符串。

val text = "1a2b3c4d5e"
val pattern = "\\d+"
val regex = Regex(pattern)
val result = regex.replaceFirst(text, "X")
println(result) //输出:Xa2b3c4d5e

replace方法也可以传入一个函数作为第二个参数,来对匹配的字符串进行更复杂的处理。

val text = "abc123def456"
val pattern = "\\d+"
val regex = Regex(pattern)
val result = regex.replace(text) { matchResult ->
    val num = matchResult.value.toInt()
    (num*10).toString()
}
println(result) //输出:abc1230def4560

replace方法的第三个参数可以指定替换次数,默认为替换全部匹配。

匹配组

正则表达式中的圆括号可以用于分组匹配,分组的内容可以使用groupValues属性获取。

val text = "John Smith, 30"
val pattern = "(\\w+) (\\w+), (\\d+)"
val regex = Regex(pattern)
val result = regex.matchEntire(text)
println(result?.groupValues)
//输出:[John Smith, John, Smith, 30]

其中,groupValues的第一个元素是整个匹配的字符串,后面的元素是每个分组匹配的内容。

匹配模式

Kotlin的Regex类支持各种匹配模式,可通过RegexOption枚举类来设置。

val text = "A1B\nC2D"
val pattern = "\\w+"
val regex = Regex(pattern, RegexOption.MULTILINE)
for (result in regex.findAll(text)) {
    println(result.value)
}
//输出:
//A1B
//C2D

其中,MULTILINE模式可以匹配多行文本,即文本中的行结束符不会终止匹配。

总结

Kotlin中的Regex类提供了强大的正则表达式支持,可以方便地进行文本匹配、查找、替换和分组等操作。掌握正则表达式的知识可以大大提高程序员的字符串处理能力。