Kotlin 中的正则表达式

Posted 码农乐园

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin 中的正则表达式相关的知识,希望对你有一定的参考价值。

正则表达式通常是指用于搜索字符串或替换正则表达式对象的正则表达式。要使用它的功能, 我们需要使用Regex(pattern:String)类。Kotlin的Regex类可在kotlin.text.regex包中找到。

Kotlin Regex构造函数

Regex(pattern: String)它根据给定的字符串模式创建一个正则表达式。
正则表达式(模式:字符串, 选项:RegexOption)它根据给定的字符串模式和给定的单个选项创建一个正则表达式。
正则表达式(模式:字符串, 选项:Set <RegexOption>)它根据给定的字符串模式和给定的选项集创建一个正则表达式。

正则表达式功能

功能说明
fun containsMatchIn(input:CharSequence):布尔值它表示正则表达式至少包含一个输入字符
有趣的发现(输入:CharSequence, startIndex:Int = 0):MatchResult?从给定的startIndex开始, 它返回输入字符序列中正则表达式的第一个匹配项。
有趣的findAll(输入:CharSequence, startIndex:Int = 0):Sequence <MatchResult>它从给定的startIndex开始, 返回输入字符串中所有出现的正则表达式。
funmatchEntire(input:CharSequence):MatchResult?它用于匹配模式中完整的输入字符。
中缀趣味匹配项(输入:CharSequence):布尔值它指示是否所有输入字符序列都在正则表达式中匹配。
有趣的替换(输入:CharSequence, 替换:字符串):字符串它用给定的替换字符串替换正则表达式的所有输入字符序列。
fun replaceFirst(输入:CharSequence, 替换:String):字符串它用给定的替换字符串替换给定的输入字符串中的第一次出现的正则表达式。
fun split(输入:CharSequence, 限制:Int = 0):List <String>它分割正则表达式的输入字符序列。
fun toPattern():模式fun toString():字符串它以字符串形式返回正则表达式。

Regex类检查示例包含输入模式

fun main(args: Array<String>)
val regex = Regex(pattern = "ko")
val matched = regex.containsMatchIn(input = "kotlin")
println(matched)

输出:

true

正则表达式函数的结果基于匹配的正则表达式模式和输入字符串。有些功能检查部分匹配, 有些检查完全匹配。

containsMatchIn()的正则表达式示例

fun main(args: Array<String>)

val regex = """a([bc]+)d?""".toRegex()
val matched = regex.containsMatchIn(input = "xabcdy")
println(matched)

输出:

true

匹配的正则表达式示例(输入:CharSequence):布尔值

matchs(input:CharSequence):regex布尔函数会检查所有输入字符序列是否匹配正则表达式。

fun main(args: Array<String>)

val regex = """a([bc]+)d?""".toRegex()
val matched1 = regex.matches(input = "xabcdy")
val matched2 = regex.matches(input = "xabcdyabcd")
val matched3 = regex.matches(input = "abcd")
println(matched1)
println(matched2)
println(matched3)

输出:

false   false  true

matchEntire(输入:CharSequence)的正则表达式示例:MatchResult?

matchEntire()函数用于匹配模式中的完整输入字符。

fun main(args: Array<String>)

val regex = Regex("abcd")
val matchResult1 = regex.matchEntire("abcd")?.value
val matchResult2 = regex.matchEntire("abcda")?.value

val matchResult3 = Regex("""\\d+""").matchEntire("100")?.value  
val matchResult4 = Regex("""\\d+""").matchEntire("100 dollars")?.value

println(matchResult1)
println(matchResult2)
println(matchResult3)
println(matchResult4)

输出:

abcd
null100null

正则表达式示例offind(输入:CharSequence, startIndex:Int = 0):MatchResult?

查找功能用于从正则表达式对象中查找输入字符序列。

fun main(args: Array<String>)

val emailParttern = Regex("""\\w+@[a-zA-Z_]+?\\.[a-zA-Z]2, 6""")
val email :String? = emailParttern.find("this is my email mymail@google.com")?.value
println(email)
val phoneNumber :String? = Regex(pattern = """\\d3-\\d3-\\d4""")
            .find("phone: 123-456-7890, e..")?.value 
println(phoneNumber)

输出:

mymail@google.com
123-456-7890

正则表达式示例offindAll(input:CharSequence, startIndex:Int = 0):Sequence <MatchResult>

regex的findAll()函数根据提供的模式返回匹配结果的序列。

fun main(args: Array<String>)
val foundResults = Regex("""\\d+""").findAll("ab12cd34ef 56gh7 8i")
val result = StringBuilder()
    for (findText in foundResults) 
result.append(findText.value + " ")
    
println(result)

输出:

12 34 56 7 8

替换的正则表达式示例(输入:CharSequence, 替换:String):String

Regex replace()函数用指定的替换字符串替换输入字符序列中的所有匹配模式。

fun main(args: Array<String>)
val replaceWith = Regex("beautiful")
val resultString = replaceWith.replace("this picture is beautiful", "awesome")
println(resultString)

输出:

this picture is awesome

正则表达式ofreplaceFirst(输入:CharSequence, 替换:字符串):字符串

Regex replaceFirst()函数用指定的替换字符串替换输入字符序列中匹配模式的第一个匹配项。

fun main(args: Array<String>)
val replaceWith = Regex("beautiful")
val resultString = replaceWith.replaceFirst("nature is beautiful, beautiful is nature", "awesome")
println(resultString)

输出:

nature is awesome, beautiful is nature

正则表达式示例split(输入:CharSequence, 限制:Int = 0):List <String>

regex split()函数根据提供的模式拆分输入字符序列。此拆分值在列表中返回。

fun main(args: Array<String>)
val splitedValue = Regex("""\\d+""").split("ab12cd34ef")
val nonsplited= Regex("""\\d+""").split("nothing match to split" )
println(splitedValue)
println(nonsplited)

输出:

[ab, cd, ef][nothing match to split]

以上是关于Kotlin 中的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin 中的 Espresso 正则表达式匹配器 [重复]

如何用数字对正则表达式德国街道地址(中缀)

Kotlin:使Java函数可调用中缀

第9章 文件IO操作正则表达式与多线程《Kotlin 项目实战教程》

正则表达式(Kotlin)

kotlin正则表达式中无法识别的反斜杠转义