Kotlin利用Regex如何構(gòu)建正則表達(dá)式詳解
前言
對于正則表達(dá)式,相信很多人都知道,但是很多人的第一感覺就是難學(xué),因為看第一眼時,覺得完全沒有規(guī)律可尋,而且全是一堆各種各樣的特殊符號,完全不知所云。
其實只是對正則不了解而以,了解了你就會發(fā)現(xiàn),原來就這樣啊~~正則所用的相關(guān)字符其實不多,也不難記,更不難懂,唯一難的就是組合起來之后,可讀性比較差,而且不容易理解,最近在學(xué)習(xí)kotlin,Kotlin 提供了一個正則表達(dá)式類 Regex,下面來一起學(xué)習(xí)下吧。
Regex 提供了豐富而簡單實用的函數(shù)。
| 函數(shù)名稱 | 功能說明 |
|---|---|
| matches(input: CharSequence): Boolean | 輸入字符串全部匹配 |
| containsMatchIn(input: CharSequence): Boolean | 輸入字符串至少有一個匹配 |
| matchEntire(input: CharSequence): MatchResult? | 輸入字符串全部匹配,返回一個匹配結(jié)果對象 |
| replace(input: CharSequence, replacement: String): String | 把輸入字符串中匹配的部分替換成replacement的內(nèi)容 |
| replace(input: CharSequence, transform: (MatchResult) -> CharSequence): String | 把輸入字符串中匹配到的值,用函數(shù) transform映射之后的新值替換 |
| find(input: CharSequence, startIndex: Int = 0): MatchResult? | 返回輸入字符串中第一個匹配的值 |
| findAll(input: CharSequence, startIndex: Int = 0): Sequence<MatchResult> | 返回輸入字符串中所有匹配的值MatchResult的序列 |
matches
輸入的字符串全部匹配“正則表達(dá)式”返回 true,否則返回 false。
val r1 = Regex("[a-z]+")
println(r1.matches("ABCdef"))
val r2 = Regex("[a-z]+", RegexOption.IGNORE_CASE) //忽略大小寫
println(r2.matches("ABCdef"))
val r3 = Regex("[A-Z]+")
println(r3.matches("ABC"))
val r4 = "[A-Z]+".toRegex()
println(r4.matches("ABCDEFXYZ"))
運行結(jié)果
false true true true
containsMatchIn
輸入的字符串中至少有一個匹配就返回 true,否則就返回 false。
val r5 = Regex("[0-9]+")
println(r5.containsMatchIn("012abdc"))
println(r5.containsMatchIn("JAVAI"))
運行結(jié)果
true false
matchEntire
對字符串全部做比較,都匹配正則表達(dá)式返回一個MatcherMatchResult對象,否則返回 null。
val r6 = Regex("[0-9]+")
println(r6.matchEntire("1234567890"))
println(r6.matchEntire("1234567890!"))
println(r6.matchEntire("1234567890")?.value)
當(dāng)我們使用 MatcherMatchResult 的 value 值來顯示匹配結(jié)果,由于 matchEntire 函數(shù)有可能返回一個 null,所以這里使用了安全調(diào)用符號“?”。
運行結(jié)果
kotlin.text.MatcherMatchResult@1fb3ebeb null 1234567890
replace
replace(input: CharSequence, replacement: String): String
輸入的字符串匹配的部分替換成 replacement 的內(nèi)容。
val r7 = Regex("[0-9]+")
println(r7.replace("12345XYZ33", "abcd"))
這個例子是把數(shù)字替換成了 abcd。
replace函數(shù)
函數(shù)簽名 replace(input: CharSequence, transform: (MatchResult)->CharSequence): String
它的功能是把輸入的字符串中匹配的值,用函數(shù) transform 映射之后的新值進行替換。
val r8 = Regex("[0-9]+")
println(r8.replace("12XYZ9", {(it.value.toInt() * it.value.toInt()).toString()}))
我們可以看到,輸入的字符串中有兩個數(shù)字,一個是 12 在字符串的前部,一個是 9 在字符串的后部。
運行結(jié)果
144XYZ81
12 被替換成了 144,9 被替換成了 81。
find函數(shù)
返回字符串中第一個匹配的 MatcherMatchResult 對象
val r9 = Regex("[0-9]+")
println(r9.find("123ADPOIW87WEERUU005"))
println(r9.find("123ADPOIW87WEERUU005")?.value)
這段代碼,會匹配123,而使用了 value 值的方式顯示出的結(jié)果,我們更加容易理解。
運行結(jié)果
kotlin.text.MatcherMatchResult@1fb3ebeb 123
findAll
返回輸入的字符串中所有匹配的值的 MatchResult 序列。
我們可以通過 forEach 循環(huán)遍歷顯示所有匹配結(jié)果
val src2 = "電話:010-12345678;傳真:010-10171695;備用:010-20141017"
val re2 = """(\d{3}-\d{8})""" //"\\d{3}-\\d{8}"
Regex(re2).findAll(src2).forEach { println(it.value + " 位置:[" + it.range + "]") }
運行結(jié)果
010-12345678 位置:[3..14] 010-10171695 位置:[19..30] 010-20141017 位置:[35..46]
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Android開發(fā)之圓角矩形創(chuàng)建工具RoundRect類定義與用法分析
這篇文章主要介紹了Android開發(fā)之圓角矩形創(chuàng)建工具RoundRect類定義與用法,結(jié)合完整實例形式分析了Android圓角矩形工具類的定義與簡單使用技巧,需要的朋友可以參考下2018-01-01
Kotlin之自定義 Live Templates詳解(模板代碼)
這篇文章主要介紹了Kotlin之自定義 Live Templates詳解(模板代碼),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
android中g(shù)zip數(shù)據(jù)壓縮與網(wǎng)絡(luò)框架解壓縮
這篇文章主要為大家介紹了android中g(shù)zip數(shù)據(jù)壓縮與網(wǎng)絡(luò)框架解壓縮實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11
android 監(jiān)聽SD卡文件變化的實現(xiàn)代碼
這篇文章主要介紹了android 監(jiān)聽SD卡文件變化的實現(xiàn)代碼,需要的朋友可以參考下2017-11-11
Android 架構(gòu)之?dāng)?shù)據(jù)庫框架搭建
這篇文章主要給大家介紹的是Android 架構(gòu)之?dāng)?shù)據(jù)庫框架搭建,在本篇中,將會讓你一點一滴從無到有創(chuàng)建一個不再為數(shù)據(jù)庫而煩惱的框架。需要的朋友可以參考下面文章的具體內(nèi)容2021-09-09
Android實現(xiàn)文件上傳和下載倒計時功能的圓形進度條
這篇文章主要介紹了Android實現(xiàn)文件上傳和下載倒計時功能的圓形進度條,需要的朋友可以參考下2017-09-09

