一篇文章学会正则表达式(Kotlin举例)
一篇文章学会正则表达式(Kotlin举例)
正则表达式是一种用来匹配字符串的工具,它可以在文本中查找特定的模式,从而实现对文本的处理和分析。在很多编程语言中,正则表达式都是非常重要的一部分。
了解正则表达式
在学习正则表达式之前,我们需要先了解一些基本概念。正则表达式由一系列字符和特殊字符组成,用来匹配字符串中的模式。例如,我们可以使用正则表达式来匹配一个电话号码、一个电子邮件地址或者一个网址。正则表达式中的一些常用特殊字符包括:
.
:匹配任意一个字符。*
:匹配前面的字符零次或多次。+
:匹配前面的字符一次或多次。?
:匹配前面的字符零次或一次。|
:表示或的关系,匹配两边任意一边的内容。()
:表示分组,可以将多个字符组合成一个整体。^
:匹配字符串的开头。$
:匹配字符串的结尾。{n}
:匹配前面的字符恰好出现 n 次。{n,}
:匹配前面的字符
正则表达式的基本语法
正则表达式的基本语法包括两个部分:模式和修饰符。模式是用来匹配字符串的规则,而修饰符则用来控制匹配的方式。
在 Kotlin 中,我们可以使用 Regex
类来表示一个正则表达式。例如,下面的代码定义了一个简单的正则表达式,用来匹配一个由数字组成的字符串:
val pattern = Regex("\\d+")
在这个正则表达式中,\d
表示匹配一个数字,+
表示匹配前面的字符一次或多次。注意,在 Kotlin 中,我们需要使用 \\
来表示 \
字符,因为 \
在字符串中有特殊的含义。
接下来,我们可以使用 matchEntire
函数来检查一个字符串是否符合这个正则表达式:
val input = "12345"
if (pattern.matchEntire(input) != null) {
println("Match!")
} else {
println("No match.")
}
这个代码会输出 Match!
,因为输入的字符串符合正则表达式的规则。
常见的正则表达式的高级用法
除了基本的语法之外,正则表达式还有很多高级用法,可以实现更加复杂的匹配和替换操作。下面是一些常用的高级用法:
1. 捕获组
捕获组是指用 ()
包围起来的一部分正则表达式,可以将匹配到的内容单独提取出来。例如,下面的代码定义了一个正则表达式,用来匹配一个由姓和名组成的字符串:
val pattern = Regex("(\\w+)\\s+(\\w+)")
val input = "John Smith"
val matchResult = pattern.matchEntire(input)
if (matchResult != null) {
val firstName = matchResult.groupValues[1]
val lastName = matchResult.groupValues[2]
println("First name: $firstName")
println("Last name: $lastName")
}
在这个代码中,\\w+
表示匹配一个或多个字母、数字或下划线,\\s+
表示匹配一个或多个空格。groupValues
属性可以返回一个列表,其中包含了所有捕获组的内容。在这个例子中,groupValues[1]
表示第一个捕获组的内容,即姓,groupValues[2]
表示第二个捕获组的内容,即名。
2. 非捕获组
非捕获组是指用 (?:)
包围起来的一部分正则表达式,它和普通的捕获组的区别在于,非捕获组匹配到的内容不会单独提取出来。例如,下面的代码定义了一个正则表达式,用来匹配一个由单词和空格组成的字符串:
val pattern = Regex("(?:\\w+\\s+)+\\w+")
val input = "one two three four"
val matchResult = pattern.matchEntire(input)
if (matchResult != null) {
println("Match!")
} else {
println("No match.")
}
在这个代码中,(?:\\w+\\s+)+
表示匹配一个或多个单词和空格组成的片段,\\w+
表示匹配一个或多个字母、数字或下划线,\\s+
表示匹配一个或多个空格。注意,这个正则表达式并没有使用捕获组,因此 matchResult.groupValues
的结果是一个空列表。
3. 零宽断言
零宽断言是指用 (?=)
或 (?!)
包围起来的一部分正则表达式,它可以在匹配的时候不消耗任何字符。例如,下面的代码定义了一个正则表达式,用来匹配一个以 http
或 https
开头的 URL:
val pattern = Regex("(?=http|https)\\w+")
val input = "https://www.google.com"
val matchResult = pattern.find(input)
if (matchResult != null) {
println("Match: ${matchResult.value}")
} else {
println("No match.")
}
在这个代码中,(?=http|https)
表示匹配一个以 http
或 https
开头的字符串,但是不消耗任何字符。find
函数可以在输入字符串中查找第一个匹配的子串,返回一个 MatchResult?
类型的结果。
总结
本文介绍了正则表达式的基本概念和语法,以及一些常用的高级用法。在实际的编程中,正则表达式是一种非常有用的工具,可以帮助我们快速地处理和分析文本数据。在 Kotlin 中,我们可以使用 Regex
类来表示和操作正则表达式,同时还可以使用一些高级用法来实现更加复杂的匹配和替换操作。
链接:https://juejin.cn/post/7239991117169131578
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。