前言
对于正则表达式,相信很多人都知道,但是很多人的第一感觉就是难学,因为看第一眼时,觉得完全没有规律可寻,而且全是一堆各种各样的特殊符号,完全不知所云。
其实只是对正则不了解而以,了解了你就会发现,原来就这样啊~~正则所用的相关字符其实不多,也不难记,更不难懂,唯一难的就是组合起来之后,可读性比较差,而且不容易理解,最近在学习kotlin,Kotlin 提供了一个正则表达式类 Regex,下面来一起学习下吧。
Regex 提供了丰富而简单实用的函数。
函数名称 | 功能说明 |
---|---|
matches(input: CharSequence): Boolean | 输入字符串全部匹配 |
containsMatchIn(input: CharSequence): Boolean | 输入字符串至少有一个匹配 |
matchEntire(input: CharSequence): MatchResult? | 输入字符串全部匹配,返回一个匹配结果对象 |
replace(input: CharSequence, replacement: String): String | 把输入字符串中匹配的部分替换成replacement的内容 |
replace(input: CharSequence, transform: (MatchResult) -> CharSequence): String | 把输入字符串中匹配到的值,用函数 transform映射之后的新值替换 |
find(input: CharSequence, startIndex: Int = 0): MatchResult? | 返回输入字符串中第一个匹配的值 |
findAll(input: CharSequence, startIndex: Int = 0): Sequence<MatchResult> | 返回输入字符串中所有匹配的值MatchResult的序列 |
matches
输入的字符串全部匹配“正则表达式”返回 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"))
运行结果
false true true true
containsMatchIn
输入的字符串中至少有一个匹配就返回 true,否则就返回 false。
val r5 = Regex("[0-9]+") println(r5.containsMatchIn("012abdc")) println(r5.containsMatchIn("JAVAI"))
运行结果
true false
matchEntire
对字符串全部做比较,都匹配正则表达式返回一个MatcherMatchResult对象,否则返回 null。
val r6 = Regex("[0-9]+") println(r6.matchEntire("1234567890")) println(r6.matchEntire("1234567890!")) println(r6.matchEntire("1234567890")?.value)
当我们使用 MatcherMatchResult 的 value 值来显示匹配结果,由于 matchEntire 函数有可能返回一个 null,所以这里使用了安全调用符号“?”。
运行结果
kotlin.text.MatcherMatchResult@1fb3ebeb null 1234567890
replace
replace(input: CharSequence, replacement: String): String
输入的字符串匹配的部分替换成 replacement 的内容。
val r7 = Regex("[0-9]+") println(r7.replace("12345XYZ33", "abcd"))
这个例子是把数字替换成了 abcd。
replace函数
函数签名 replace(input: CharSequence, transform: (MatchResult)->CharSequence): String
它的功能是把输入的字符串中匹配的值,用函数 transform 映射之后的新值进行替换。
val r8 = Regex("[0-9]+") println(r8.replace("12XYZ9", {(it.value.toInt() * it.value.toInt()).toString()}))
我们可以看到,输入的字符串中有两个数字,一个是 12 在字符串的前部,一个是 9 在字符串的后部。
运行结果
144XYZ81
12 被替换成了 144,9 被替换成了 81。
find函数
返回字符串中第一个匹配的 MatcherMatchResult 对象
val r9 = Regex("[0-9]+") println(r9.find("123ADPOIW87WEERUU005")) println(r9.find("123ADPOIW87WEERUU005")?.value)
这段代码,会匹配123,而使用了 value 值的方式显示出的结果,我们更加容易理解。
运行结果
kotlin.text.MatcherMatchResult@1fb3ebeb 123
findAll
返回输入的字符串中所有匹配的值的 MatchResult 序列。
我们可以通过 forEach 循环遍历显示所有匹配结果
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 + "]") }
运行结果
010-12345678 位置:[3..14] 010-10171695 位置:[19..30] 010-20141017 位置:[35..46]
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对小牛知识库的支持。
本文向大家介绍iOS 正则表达式详解,包括了iOS 正则表达式详解的使用技巧和注意事项,需要的朋友参考一下 一、系统自带正则表达式用法 除了正则可以用,还有NSScanner这个类可以达到某些相同的效果 1、创建正则表达式对象 2、正则表达式对象可调用的方法 5.谓词 以上所述是小编给大家介绍的iOS正则表达式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢
(?:x) (x) 这两个好像可以平价替换的吧。有什么特殊应用吗?
本文向大家介绍C#中如何利用正则表达式判断字符,包括了C#中如何利用正则表达式判断字符的使用技巧和注意事项,需要的朋友参考一下 废话不多说了,下面代码给大家介绍下利用正则表达式判断字符的方法,具体代码如下所示: 以上所述是小编给大家介绍的C#中如何利用正则表达式判断字符,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教程网站的支持!
如何简化这个正则呢? 或者是否有其他实现方式(正则)?
如何在不包含连续子字符串baa的字母表{a,b,c}上表达正则表达式?
本文向大家介绍正则表达式使用示例详解,包括了正则表达式使用示例详解的使用技巧和注意事项,需要的朋友参考一下 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。 正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。 下面通过实例代码介绍下正则表达式使用 //一个数据类型,记录文本规则,一些事先定