Kotlin中Regex正则表达式(下)

826 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第31天,点击查看活动详情

前言

在正则表达式上篇介绍了Kotlin的 regex 标准库中提供的几个常用正则函数containsMatchIn find findAll matchEntire matches replace以及这些常用函数的用法举例。那本篇就来介绍一下Kotlin中的正则表达式的通配符相关知识点。

常用通配符

正则表达式符号含义
.匹配任何单个字符
?一次匹配或根本不匹配前面的元素
+与前面的元素匹配一次或多次
*与前面的元素匹配零次或多次
^匹配字符串中的起始位置
$匹配字符串中的结束位置
[abc]匹配 a 或 b 或 c
[a-c]范围; 匹配 a 或 b 或 c
[^abc]否定,匹配除 a 或 b 或 c 之外的所有内容
\s匹配空白字符
\w匹配单词字符; 等同于[a-zA-Z_0-9]
\d任意单个0到9的数字
\D任意单个非数字字符

示例

元字符(.) : 匹配任何单个字符

val words = listOf("seven", "even", "prevent", "revenge", "maven",
            "eleven", "amen", "event")
val pattern = "..even".toRegex()     // 俩个点元字符

符合规则的匹配结果:prevent, eleven

问号(?)字符 : 与指定字符零次或一次匹配

val words = listOf("seven", "even", "prevent", "revenge", "maven",
            "eleven", "amen", "event")
val pattern = ".?even".toRegex()

符合规则的匹配结果:seveneven

{n, m}字符 :至少匹配指定字符的 n 次,最多匹配 m 次

val words = listOf("pen", "book", "cool", "pencil", "forest", "car",
            "list", "rest", "ask", "point", "eyes")
val pattern = "\w{5,6}".toRegex()  //其实就是匹配5-6个字符的单词

符合规则的匹配结果: pencilpointforest

子模式用()字符创建

val words = listOf("book", "bookshelf", "bookworm",
            "bookcase", "bookish", "bookkeeper", "booklet", "bookmark")
val pattern = "book(case|let|ish)?".toRegex()

符合规则的匹配结果:bookcasebookletbookish

命名字符类 : \\d+匹配数字

val text = "We met in 2013. She must be now about 27 years old."
val pattern = "\d+".toRegex()

符合规则的匹配结果:201327

匹配电子邮件处理

val emails = listOf("vincent.yijun@gmail.com", "andy@yahoocom",
            "34234sdfa#2345", "f344@gmail.com", "dandy!@yahoo.com")
val pattern = "[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,18}".toRegex()

符合规则的匹配结果:vincent.yijun@gmail.comf344@gmail.com
该示例匹配规则分析:

  • 本地部分:通常为公司名称,昵称组合[a-zA-Z0-9._-]+
  • 匹配邮箱符号 @
  • 邮箱域名部分 [a-zA-Z0-9-]+
  • 点字符 \\.
  • 顶级域名 [a-zA-Z.]{2,18} 可包含 2 到 18 个字符

总结

正则表达式的出现对数据查找的效率提升不止一点。学习完这么多的用例后和上篇所介绍的正则函数,可以知道对于正则最重要的概念就是匹配模式,是字符串操作时的依据。它是具体的字符,也可以是特定的转义符。如果掌握以上这些常用的匹配规则和通配字符,那开发中基本上没啥问题!

掘金(JUEJIN)  一起分享知识, Keep Learning!