📜  Kotlin 正则表达式

📅  最后修改于: 2022-05-13 01:55:00.281000             🧑  作者: Mango

Kotlin 正则表达式

正则表达式是几乎所有编程语言的基本组成部分,Kotlin 也不例外。在 Kotlin 中,对正则表达式的支持是通过Regex类提供的。此类的对象表示正则表达式,可用于字符串匹配目的。

class Regex

我们可以很容易地发现正则表达式在不同类型的软件中的使用,从最简单到极其复杂的应用程序。
在这篇文章之前先看看Java中的正则表达式

构造函数——

  1. (pattern: String) :此构造函数基于模式字符串创建正则表达式。
  2. (pattern: String, option: RegexOption) :此构造函数根据指定的模式和选项创建正则表达式。选项是 RegexOption 枚举类的常量。
  3. (pattern: String, options: Set) :此构造函数基于指定的字符串模式和集合中指定的选项集创建正则表达式。

特性 -

  1. val options: Set :它包含在创建正则表达式时要使用的选项集。
  2. val pattern: String :它包含描述模式的字符串。

正则表达式函数 –

containsMatchIn() –此函数返回一个布尔值,指示输入中是否存在与我们的模式匹配的任何内容。

fun containsMatchIn(input: CharSequence): Boolean

在 Kotlin 中演示 containsMatchIn()函数的示例

Java
fun main()
{
    // Regex to match any string starting with 'a'
    val pattern = Regex("^a")
    println(pattern.containsMatchIn("abc"))
    println(pattern.containsMatchIn("bac"))
}


Java
fun main()
{
    // Regex to match "ll" in a string
    val pattern1 = Regex("ll")
    val ans : MatchResult? = pattern1.find("HelloHello", 5)
    println(ans ?.value)
}


Java
fun main()
{
    // Regex to match a 3 letter pattern beginning with ab
    val pattern2 = Regex("ab.")
    val ans1 : Sequence = pattern2.findAll("abcfffgdbabs", 0)
    // forEach loop used to display all the matches
    ans1.forEach()
    {
            matchResult -> println(matchResult.value)
    }
    println()
}


Java
fun main()
{
    // Tests demonstrating entire string match
    val pattern = Regex("g([ee]+)ks?")
    println(pattern.matches("geeks"))
    println(pattern.matches("geeeeeeeeeeks"))
    println(pattern.matches("geeksforgeeks"))
}


Java
fun main()
{
    // Tests demonstrating entire string match
    var pattern = Regex("geeks?")
    println(pattern.matchEntire("geeks")?.value)
    println(pattern.matchEntire("geeeeeeeks")?.value)
    pattern = Regex("""\D+""")
    println(pattern.matchEntire("geeks")?.value)
    println(pattern.matchEntire("geeks12345")?.value)
}


Java
fun main()
{
    // Tests demonstrating replacement functions
    val pattern4 = Regex("xyz")
    // replace all xyz with abc in the string
    println(pattern4.replace("xyzxyzzzzzzzzz", "abc"))
    // replace only first xyz with abc not all
    println(pattern4.replaceFirst("xyzddddddxyz", "abc"))
    println()
}


Java
fun main()
{
    // Tests demonstrating split function
    val pattern = Regex("\\s+")  // separate for white-spaces
    val ans : List = pattern.split("This is a sentence")
    ans.forEach { word -> println(word) }
}


输出:

true
false

find() -此函数返回与输入中我们的模式有关的第一个匹配子字符串,从指定的
起始索引。

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

在 Kotlin 中演示 find()函数的示例

Java

fun main()
{
    // Regex to match "ll" in a string
    val pattern1 = Regex("ll")
    val ans : MatchResult? = pattern1.find("HelloHello", 5)
    println(ans ?.value)
}

输出:

ll

findAll() -此函数返回输入中指定模式的所有匹配项,从给定的起始索引开始搜索。

fun findAll(
    input: CharSequence, 
    startIndex: Int
): Sequence

在 Kotlin 中演示 findAll函数的示例

Java

fun main()
{
    // Regex to match a 3 letter pattern beginning with ab
    val pattern2 = Regex("ab.")
    val ans1 : Sequence = pattern2.findAll("abcfffgdbabs", 0)
    // forEach loop used to display all the matches
    ans1.forEach()
    {
            matchResult -> println(matchResult.value)
    }
    println()
}

输出:

abc
abs

matches() -此函数返回一个布尔值,指示输入字符串是否完全匹配模式。

infix fun matches(input: CharSequence): Boolean

在 Kotlin 中演示 match()函数的示例

Java

fun main()
{
    // Tests demonstrating entire string match
    val pattern = Regex("g([ee]+)ks?")
    println(pattern.matches("geeks"))
    println(pattern.matches("geeeeeeeeeeks"))
    println(pattern.matches("geeksforgeeks"))
}

输出:

true
true
false

matchEntire() -此函数尝试将整个输入与指定的模式字符串匹配,如果匹配则返回字符串。如果与字符串不匹配,则返回null

fun matchEntire(input: CharSequence): MatchResult?

在 Kotlin 中演示 matchEntire()函数的示例

Java

fun main()
{
    // Tests demonstrating entire string match
    var pattern = Regex("geeks?")
    println(pattern.matchEntire("geeks")?.value)
    println(pattern.matchEntire("geeeeeeeks")?.value)
    pattern = Regex("""\D+""")
    println(pattern.matchEntire("geeks")?.value)
    println(pattern.matchEntire("geeks12345")?.value)
}

输出:

geeks
null
geeks
null

replace() -此函数用指定的替换字符串替换输入字符串中所有出现的模式。

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

replaceFirst() -此函数用替换字符串替换输入中正则表达式的第一个匹配项。

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

演示 Kotlin 中的 replace() 和 replaceFirst() 函数的示例

Java

fun main()
{
    // Tests demonstrating replacement functions
    val pattern4 = Regex("xyz")
    // replace all xyz with abc in the string
    println(pattern4.replace("xyzxyzzzzzzzzz", "abc"))
    // replace only first xyz with abc not all
    println(pattern4.replaceFirst("xyzddddddxyz", "abc"))
    println()
}

输出:

abcabczzzzzzzz    // replace all
abcddddddxyz      // replace first matching only

split() -此函数根据指定的参数将输入字符串分解为标记。

fun split(input: CharSequence, limit: Int): List

在 Kotlin 中演示 split()函数的示例

Java

fun main()
{
    // Tests demonstrating split function
    val pattern = Regex("\\s+")  // separate for white-spaces
    val ans : List = pattern.split("This is a sentence")
    ans.forEach { word -> println(word) }
}

输出:

This
is
a
sentence