在Kotlin中除了使用Java的 PatternMatcher 等类外,还可以使用Kotlin提供的 Regex 类来创建正则表达式。

构造Regex表达式

  1. 使用Regex构造函数
  2. 使用String的toRegex()扩展函数

Regex函数

  1. matches() 函数,如果输入字符串全部匹配,那么返回true,否则就返回false
  2. containsMatchIn() 函数,输入字符串至少有一个匹配就返回true,没有匹配就返回false
  3. matchEntire() 函数,如果输入字符串全部匹配则返回一个MatcherMatchResult对象,否则返回null
  4. replace(input: CharSequence, replacement: String):String 函数,将输入字符串input中匹配的部分 替换成replacement内容
  5. replace(input: CharSequence, transform: (MatchResult) -> CharSequence): String 函数,把输入字符串中匹配到的值,用transform()函数处理后的新值进行替换
  6. find() 函数,返回 输入字符串中第一个匹配的MatcherMatchResult对象
  7. 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 正则表达式相关推荐

  1. ZetCode Kotlin 教程

    来源:ApacheCN ZetCode 翻译项目 译者:飞龙 协议:CC BY-NC-SA 4.0 贡献指南 本项目需要校对,欢迎大家提交 Pull Request. 请您勇敢地去翻译和改进翻译.虽然 ...

  2. Kotlin String 正则表达式,快速测试正则表达式

    1. Kotlin String 正则表达式的使用 目标:将字符串中的 XXX 替换为 <font color=#0000ff>XXX</font> 1.1 预备知识 : ca ...

  3. 为什么 Java 后端开发没有大规模采用 Kotlin?

    点击关注公众号,Java干货及时送达 转自:InfoQ 作者:Ivan Sanchez,  译者:王者 链接:www.infoq.cn/article/dSSYAFSMMxx1sZkJwrN2 在使用 ...

  4. Golang正则笔记 :使用正则表达式处理题库文本

    前言 由于企业内部的一些考试需要,有些同事要时常通过一个word格式的题库文件来查询相应题目,但在手机上用word进行查询,总觉得操作上很不方便.借着这个契机,应用Golang和Kotlin开发了一个 ...

  5. Kotlin学习 PART 2:kotlin基础

    想了很久,一直在想怎么记录笔记最高效,最后感觉还是结合代码比较好. 1.整数的遍历,in表示是否在一个区间内,!in表示不再某个区间内 fun fizzBuzz(i:Int) = when { i%1 ...

  6. 【转】多语言的正则表达式,我们应该掌握

    正则表达式,软件工程中最为强大,且广泛适用,令人信服的技术之一.从验证电子邮件地址到执行复杂的代码重构器,正则表达式的用途非常广泛,是任何软件工程师工具箱中必不可少的条目. 什么是正则表达式? 正则表 ...

  7. Kotlin 1.2 新特性

    点击关注异步图书,置顶公众号 每天与你分享IT好书 技术干货 职场知识 ​ 在Kotlin 1.1中,团队正式发布了JavaScript目标,允许开发者将Kotlin代码编译为JS并在浏览器中运行.在 ...

  8. Bruce Eckel:我最喜欢Python,Kotlin或将取代Java(附演讲全文+PPT)

    导读:Java很难再做出更多的改变了,那么它会被替代吗?它的替代者是谁? Bruce Eckel为什么最喜欢Python,Python究竟好在哪? Kotlin是怎样为程序员提高效率的? 大龄程序员应 ...

  9. 从零开始学 Kotlin 之「2」数据类型

    前言 大家好,这里是「从零开始学 Kotlin 之『2 』数据类型」,本文首发于公众号「Binguner」,欢迎前往大家关注.我会每周分享一些关于 Android 和其他方向的技术干货或一些关于认知的 ...

  10. Kotlin Weekly 中文周报 —— 16

    Kotlin 开发中文周报 文章 Android 开发者的一些实用技巧.(github.com) Ravindra 在 DevfestAhm 2017 的演讲. 像 Kotlin 的专家一样测试 .( ...

最新文章

  1. 企业架构 - 组织角色和技能
  2. matlab simulink 电气连接
  3. Hihocoder 小Hi小Ho扫雷作死一二三
  4. [vue] ajax、fetch、axios这三都有什么区别?
  5. 2名数学家或发现史上最快超大乘法运算法,欲破解困扰人类近半个世纪的问题...
  6. Windows直接获取文件的哈希值
  7. webstorm jquery语法提示_WebStorm快速入门指南,开发者必备!
  8. centos6.5 mysql5.6主从复制
  9. 为socket的recv/send设置超时
  10. VeraCrypt文件硬盘加密使用教程
  11. java jcmd,jcmd命令用法
  12. vue2使用 relation-graph 展示关系图谱
  13. 人工蜂群算法求解货位优化问题
  14. WinCC 高速数据采集的实现
  15. 【 [mmdetection] 如何在训练中断后,接着上次训练?】
  16. linux下twm切换gn,检测快速用户切换Linux
  17. win10系统每天凌晨3点左右,自动关机重启
  18. Do Transformers Really Perform Bad for Graph Representation 阅读笔记
  19. python网络部分
  20. js根据name值获取元素

热门文章

  1. 以太坊nonce详解
  2. ClassNotFound找不到 redis.clients.jedis.JedisShardInfo
  3. oracle11g 测试io,IO性能测试 1:Oracle ORION
  4. 虚拟服务器和vdi,比较瘦客户端和VDI
  5. 今日,华为重磅发布6大创新产品及服务!
  6. 花椒母公司花房更新招股书:年利润4亿 周鸿祎是大股东
  7. ArcGIS重装之旧软件卸不干净的问题
  8. 每天一个php函数之:strtolower() 函数
  9. 如何将本地代码保存至码云中
  10. 超详细的装饰器Decorators解读--附实例