一篇文章学会正则表达式(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
类来表明和操作正则表达式,一起还能够运用一些高档用法来完成愈加杂乱的匹配和替换操作。