写点什么

Kotlin 中 Regex 正则表达式 (下)

作者:子不语Any
  • 2022-11-30
    湖南
  • 本文字数:1013 字

    阅读完需:约 3 分钟

Kotlin中Regex正则表达式(下)

前言

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

常用通配符

示例

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

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 个字符

总结

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

发布于: 刚刚阅读数: 5
用户头像

子不语Any

关注

If not now,when? 2022-09-17 加入

安卓攻城狮

评论

发布
暂无评论
Kotlin中Regex正则表达式(下)_android_子不语Any_InfoQ写作社区