Kotlin 正则表达式
fun testRegex(): Unit {
// 构造Regex表达式
val r1 = Regex("[a-z]+")
val r2 = Regex("[a-z]+", RegexOption.IGNORE_CASE)
val r3 = "[A-Z]+".toRegex()
println("matches() 函数")
// matches() 函数,输入字符串全部匹配
val x1 = r1.matches("ABCxyz")
println(x1) // 输出:false,这个正则表达式要求输入字符串每个字符都是小写,"ABC"大写不匹配
val x2 = r2.matches("ABCxyz")
println(x2) // 输出:true,RegexOption.IGNORE_CASE,正则表达式忽略大小写
val x3 = r3.matches("OPQSN")
println(x3) // 输出:true,都是大写,满足[A-Z]
println("containsMatchIn() 函数")
// containsMatchIn() 函数,输入字符串至少有一个匹配就返回true,没有匹配就返回false
val y1 = r1.containsMatchIn("a12345.")
println(y1) // 输出:true,输入字符串中"a"就满足正则表达式[a-z]
val y11 = r1.containsMatchIn("ABC12345")
println(y11) // 输出:false,输入字符串没有一个满足正则表达式[a-z]
println("matchEntire() 函数")
// matchEntire() 函数,如果输入字符串全部匹配则返回一个MatcherMatchResult对象,否则返回null
val z1 = r1.matchEntire("kotlin")
println(z1) // 输出:@27a418fe,输入字符串全部满足正则表达式
println(z1?.value) // 输出:kotlin,通过访问MatcherMatchResult的value属性,获得匹配的值
val z11 = r1.matchEntire("kotlin_java_C++")
println(z11) // 输出:null,输入中的"_"、"+"不匹配正则表达式[a-z]
println(z11?.value) // 输出:null
println("replace(input: CharSequence, replacement: String):String 函数")
// replace(input: CharSequence, replacement: String):String 函数,
// 将输入字符串input中匹配的部分 替换成replacement内容
val a1 = r1.replace("abc12345","TEST*")
println(a1) // 输出:TEST*12345,输入字符串中的"abc"匹配正则表达式[a-z],因此它被替换了
val a11 = r1.replace("aBcD567xyz#", "TEST*")
println(a11) // 输出:TEST*BTEST*D567TEST*#,输入字符串中的"a"、"c"、"xyz"匹配正则表达式[a-z]
println("replace(input: CharSequence, transform: (MatchResult) -> CharSequence): String 函数")
// 把输入字符串中匹配到的值,用transform()函数处理后的新值进行替换
val b1 = r1.replace("ab345cD") { "[${it.value}]" }
println(b1) // 输出:[ab]345[c]D,将输入字符串中匹配正则表达式[a-z]的内容用"[]"标出来了
println("find() 函数")
// find() 函数,返回 输入字符串中第一个匹配的MatcherMatchResult对象
val c1 = r1.find("ABcd5678efG")
println(c1) // 输出:@77459856
println(c1?.value) // 输出:cd,获得匹配的值
println("findAll() 函数")
// findAll() 函数,返回 输入字符串中所有匹配的MatchResult序列
val d1 = r1.findAll("ABcd5678efGhi")
println(d1) // 输出:@4dd8da9
d1.forEach { println(it.value) } // 输出:cd ef hi,遍历输出所有匹配的值
}