Regex 是 Kotlin 标准库中用于处理正则表达式的类,提供了与 Java 中的 Pattern 类类似的功能。它允许你使用正则表达式在字符串中执行模式匹配、查找、替换等操作。
1. 基本用法
在 Kotlin 中,Regex 类位于 kotlin.text 包中,可以通过构造函数传递正则表达式字符串来创建 Regex 对象。
2. 构造 Regex 对象
要创建一个 Regex 对象,可以使用以下两种方式:
使用 Regex 构造函数。
使用 toRegex() 扩展函数(这是更常见的方式)。
// 使用 Regex 构造函数创建
val regex = Regex("\\d+") // 匹配一个或多个数字
// 使用 toRegex 扩展函数创建
val regex2 = "\\d+".toRegex() // 匹配一个或多个数字
在正则表达式字符串中,\ 用于转义字符(因为反斜杠在字符串中本身是一个转义字符)
3. 常见方法
matches() - 完全匹配
该方法用于检查整个字符串是否与正则表达式完全匹配。
val regex = "\\d+".toRegex()
val result = regex.matches("12345") // true
val result2 = regex.matches("abc123") // false
find() - 查找第一个匹配项
find() 方法返回 MatchResult?,表示第一个匹配的部分。如果没有匹配项,返回 null。
val regex = "\\d+".toRegex()
val matchResult = regex.find("abc123def")
if (matchResult != null) {
println("Found match: ${matchResult.value}") // 输出: Found match: 123
}
findAll() - 查找所有匹配项
findAll() 方法返回所有匹配项的序列(Sequence)。它会返回字符串中所有符合正则表达式的部分。
val regex = "\\d+".toRegex()
val allMatches = regex.findAll("abc123def456ghi789")
for (match in allMatches) {
println("Found match: ${match.value}")
}
// 输出:
// Found match: 123
// Found match: 456
// Found match: 789
replace() - 替换匹配项
replace() 方法用于将匹配的部分替换为指定的字符串。它会返回一个新的字符串。
val regex = "\\d+".toRegex()
val result = regex.replace("abc123def456", "#")
println(result) // 输出: abc#def#
如果你想用匹配到的内容进行动态替换,可以传递一个函数作为第二个参数:
val regex = "\\d+".toRegex()
val result = regex.replace("abc123def456") { match ->
"Number: ${match.value}"
}
println(result) // 输出: abcNumber: 123defNumber: 456
replaceFirst() - 替换第一个匹配项
replaceFirst() 方法只会替换第一个匹配项。
val regex = "\\d+".toRegex()
val result = regex.replaceFirst("abc123def456", "#")
println(result) // 输出: abc#def456
split() - 使用正则拆分字符串
split() 方法根据正则表达式来拆分字符串,返回一个字符串列表。
val regex = "\\s+".toRegex() // 匹配一个或多个空格
val result = regex.split("apple banana orange")
println(result) // 输出: [apple, banana, orange]
4. MatchResult 类
当使用 find() 或 findAll() 方法时,会得到一个 MatchResult 对象。MatchResult 包含了匹配的详细信息。
value: 返回匹配的字符串。
range: 返回匹配部分的字符范围。
groupValues: 返回匹配的分组(捕获组)值。
例如:
val regex = "(\\d+)-(\\d+)".toRegex()
val matchResult = regex.find("Order: 123-456")
if (matchResult != null) {
println("Match: ${matchResult.value}") // 输出: 123-456
println("Group 1: ${matchResult.groupValues[1]}") // 输出: 123
println("Group 2: ${matchResult.groupValues[2]}") // 输出: 456
}
5. 正则表达式中的常见模式
1.\d : 匹配数字(0-9)。
2.\D : 匹配非数字。
3.\w : 匹配字母、数字和下划线(等同于 [a-zA-Z0-9_])。
4.\W : 匹配非字母、非数字、非下划线。
5.\s : 匹配任何空白字符(如空格、制表符)。
6.\S : 匹配任何非空白字符。
7. . : 匹配任意字符(除了换行符)。
8.* : 匹配前一个字符零次或多次。
9.+ : 匹配前一个字符一次或多次。
10.? : 匹配前一个字符零次或一次。
11. {n,m} : 匹配前一个字符至少 n 次,最多 m 次。
12. [] : 匹配括号内的任意一个字符。
13. () : 捕获分组。
6. 总结
Kotlin 中的 Regex 类提供了强大的正则表达式支持,可以轻松执行字符串匹配、查找、替换等操作。它的使用方式与 Java 中的 Pattern 类类似,提供了简单、直观的方法来处理常见的文本操作。通过正则表达式,你可以更加灵活地处理文本数据。
922

被折叠的 条评论
为什么被折叠?



