Kotlin正則表達式

正則(Regex)通常是指正則表達式,用於搜索字符串或替換正則表達式對象。 要使用它,需要使用Regex(pattern:String)類。 Kotlin Regex類可以在kotlin.text.regex包中找到。

Kotlin Regex構造函數

構造函數

描述

Regex(pattern: String)

它從給定的字符串模式創建正則表達式。

Regex(pattern: String, option: RegexOption)

它從給定的字符串模式創建一個正則表達式並給出單個選項。

Regex(pattern: String, options: Set<RegexOption>)

它根據給定的字符串模式和給定選項集創建正則表達式。

正則表達式函數

方法

描述

fun containsMatchIn(input: CharSequence): Boolean

它表示正則表達式包含至少一個輸入字符

fun find(input: CharSequence, startIndex: Int = 0): MatchResult?

它返回輸入字符序列中正則表達式的第一個匹配項,從給定的startIndex開始。

fun findAll(input: CharSequence, startIndex: Int = 0): Sequence<MatchResult>

它返回輸入字符串中所有出現的正則表達式,從給定的startIndex開始。

funmatchEntire(input: CharSequence): MatchResult?

它用於匹配模式中的完整輸入字符。

infix fun matches(input: CharSequence): Boolean

它指示所有輸入字符序列是否與正則表達式匹配。

fun replace(input: CharSequence, replacement: String): String

它用給定的替換字符串替換正則表達式的所有輸入字符序列。

fun replaceFirst(input: CharSequence, replacement: String): String

它用給定的替換字符串替換給定輸入字符串中第一次出現的正則表達式。

fun split(input: CharSequence, limit: Int = 0): List<String>

它分割正則表達式的輸入字符序列。

fun toPattern(): Patternfun toString(): String

它以字符串形式返回正則表達式。

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

matches(input: CharSequence): Boolean 正則表達式的示例

matches(input: CharSequence)正則表達式的布爾函數檢查所有輸入字符序列是否匹配正則表達式。

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(input: 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
null
100
null

find(input: CharSequence, startIndex: Int = 0): MatchResult? 正則表達式示例

find函數用於從regex對象中查找輸入字符序列。

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 [email protected]")?.value
    println(email)
    val phoneNumber :String? = Regex(pattern = """\d{3}-\d{3}-\d{4}""")
        .find("phone: 123-456-7890, e..")?.value
    println(phoneNumber)
}

執行上面示例代碼,得到以下結果 -

[email protected]
123-456-7890

findAll(input: CharSequence, startIndex: Int = 0): Sequence 正則表達式示例

正則表達式的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

replace(input: CharSequence, replacement: 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

replaceFirst(input: CharSequence, replacement: String): String 正則表達式示例

正則表達式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(input: CharSequence, limit: Int = 0): List 正則表達式示例

regex split()函數根據提供的模式拆分輸入字符序列。 此拆分值放在List中返回。

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]