Kotlin 正则表达式
在Kotlin中除了使用Java的 Pattern
、Matcher
等类外,还可以使用Kotlin提供的 Regex
类来创建正则表达式。
构造Regex表达式
- 使用Regex构造函数
- 使用String的toRegex()扩展函数
Regex函数
- matches() 函数,如果输入字符串全部匹配,那么返回true,否则就返回false
- containsMatchIn() 函数,输入字符串至少有一个匹配就返回true,没有匹配就返回false
- matchEntire() 函数,如果输入字符串全部匹配则返回一个MatcherMatchResult对象,否则返回null
- replace(input: CharSequence, replacement: String):String 函数,将输入字符串input中匹配的部分 替换成replacement内容
- replace(input: CharSequence, transform: (MatchResult) -> CharSequence): String 函数,把输入字符串中匹配到的值,用transform()函数处理后的新值进行替换
- find() 函数,返回 输入字符串中第一个匹配的MatcherMatchResult对象
- findAll() 函数,返回 输入字符串中所有匹配的MatchResult序列
代码测试:
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,没有匹配就返回falseval y1 = r1.containsMatchIn("a12345.")println(y1) // 输出:true,输入字符串中"a"就满足正则表达式[a-z]val y11 = r1.containsMatchIn("ABC12345")println(y11) // 输出:false,输入字符串没有一个满足正则表达式[a-z]println("matchEntire() 函数")// matchEntire() 函数,如果输入字符串全部匹配则返回一个MatcherMatchResult对象,否则返回nullval z1 = r1.matchEntire("kotlin")println(z1) // 输出:kotlin.text.MatcherMatchResult@27a418fe,输入字符串全部满足正则表达式println(z1?.value) // 输出:kotlin,通过访问MatcherMatchResult的value属性,获得匹配的值val z11 = r1.matchEntire("kotlin_java_C++")println(z11) // 输出:null,输入中的"_"、"+"不匹配正则表达式[a-z]println(z11?.value) // 输出:nullprintln("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) // 输出:kotlin.text.MatcherMatchResult@77459856println(c1?.value) // 输出:cd,获得匹配的值println("findAll() 函数")// findAll() 函数,返回 输入字符串中所有匹配的MatchResult序列val d1 = r1.findAll("ABcd5678efGhi")println(d1) // 输出:kotlin.sequences.GeneratorSequence@4dd8da9d1.forEach { println(it.value) } // 输出:cd ef hi,遍历输出所有匹配的值
}
使用Java的正则表达式类
fun testRegexJ(): Unit {val re = Regex("[0-9]+")val p = re.toPattern()val m = p.matcher("S50UT678")while (m.find()) {val g = m.group()println(g)} // 输出: 50 678
}
Kotlin 正则表达式相关推荐
- ZetCode Kotlin 教程
来源:ApacheCN ZetCode 翻译项目 译者:飞龙 协议:CC BY-NC-SA 4.0 贡献指南 本项目需要校对,欢迎大家提交 Pull Request. 请您勇敢地去翻译和改进翻译.虽然 ...
- Kotlin String 正则表达式,快速测试正则表达式
1. Kotlin String 正则表达式的使用 目标:将字符串中的 XXX 替换为 <font color=#0000ff>XXX</font> 1.1 预备知识 : ca ...
- 为什么 Java 后端开发没有大规模采用 Kotlin?
点击关注公众号,Java干货及时送达 转自:InfoQ 作者:Ivan Sanchez, 译者:王者 链接:www.infoq.cn/article/dSSYAFSMMxx1sZkJwrN2 在使用 ...
- Golang正则笔记 :使用正则表达式处理题库文本
前言 由于企业内部的一些考试需要,有些同事要时常通过一个word格式的题库文件来查询相应题目,但在手机上用word进行查询,总觉得操作上很不方便.借着这个契机,应用Golang和Kotlin开发了一个 ...
- Kotlin学习 PART 2:kotlin基础
想了很久,一直在想怎么记录笔记最高效,最后感觉还是结合代码比较好. 1.整数的遍历,in表示是否在一个区间内,!in表示不再某个区间内 fun fizzBuzz(i:Int) = when { i%1 ...
- 【转】多语言的正则表达式,我们应该掌握
正则表达式,软件工程中最为强大,且广泛适用,令人信服的技术之一.从验证电子邮件地址到执行复杂的代码重构器,正则表达式的用途非常广泛,是任何软件工程师工具箱中必不可少的条目. 什么是正则表达式? 正则表 ...
- Kotlin 1.2 新特性
点击关注异步图书,置顶公众号 每天与你分享IT好书 技术干货 职场知识 在Kotlin 1.1中,团队正式发布了JavaScript目标,允许开发者将Kotlin代码编译为JS并在浏览器中运行.在 ...
- Bruce Eckel:我最喜欢Python,Kotlin或将取代Java(附演讲全文+PPT)
导读:Java很难再做出更多的改变了,那么它会被替代吗?它的替代者是谁? Bruce Eckel为什么最喜欢Python,Python究竟好在哪? Kotlin是怎样为程序员提高效率的? 大龄程序员应 ...
- 从零开始学 Kotlin 之「2」数据类型
前言 大家好,这里是「从零开始学 Kotlin 之『2 』数据类型」,本文首发于公众号「Binguner」,欢迎前往大家关注.我会每周分享一些关于 Android 和其他方向的技术干货或一些关于认知的 ...
- Kotlin Weekly 中文周报 —— 16
Kotlin 开发中文周报 文章 Android 开发者的一些实用技巧.(github.com) Ravindra 在 DevfestAhm 2017 的演讲. 像 Kotlin 的专家一样测试 .( ...
最新文章
- 企业架构 - 组织角色和技能
- matlab simulink 电气连接
- Hihocoder 小Hi小Ho扫雷作死一二三
- [vue] ajax、fetch、axios这三都有什么区别?
- 2名数学家或发现史上最快超大乘法运算法,欲破解困扰人类近半个世纪的问题...
- Windows直接获取文件的哈希值
- webstorm jquery语法提示_WebStorm快速入门指南,开发者必备!
- centos6.5 mysql5.6主从复制
- 为socket的recv/send设置超时
- VeraCrypt文件硬盘加密使用教程
- java jcmd,jcmd命令用法
- vue2使用 relation-graph 展示关系图谱
- 人工蜂群算法求解货位优化问题
- WinCC 高速数据采集的实现
- 【 [mmdetection] 如何在训练中断后,接着上次训练?】
- linux下twm切换gn,检测快速用户切换Linux
- win10系统每天凌晨3点左右,自动关机重启
- Do Transformers Really Perform Bad for Graph Representation 阅读笔记
- python网络部分
- js根据name值获取元素