Scala:正则表达式

复制代码
object test03 {
  //正则表达式
  def main(args: Array[String]): Unit = {
    //定义一个正则表达式

    //1.[ab]:表示匹配一个字符,或者是a,或者是b
    //2.[a-z]:表示从a到z的26个字母中的任意一个
    //3.[A-Z]:表示从A到Z的26个字母中的任意一个
    //4.[0-9]:表示从0到9的10个数字中的任意一个
    //4.1[^ab]:表示匹配一个字符,除a,b之外的
    //5.[11]:表示前面的字符能出现11次
//    val reg1="[0-9]{11}".r
//    val reg1="[ab]".r
//    val reg1="a.c".r
//    val reg1="\\d".r
//    val reg1="\\d{3,6}".r  //贪婪模式
//    val reg1="\\d{3,6}?".r  //非贪婪模式
    //6.脱字符 ^ 如果在正则的最前面,表示,要匹配的内容必须在字符串的开头
    //7.脱字符 $ 如果在正则的最后边,表示,要匹配的内容必须在字符串的结尾
    //8.英文的 .:表示除了换行之外的其他的任意一个字符
    //9. \d:表示 0-9 的一个数字
    //10. \D:表示 除了 \d之外 的字符
    //11. \w:表示[a-zAz-Z0-9_] 63个字符中任意一个,”一个字“
    //12. \W:表示 除了 \w之外 的字符
    //13. \s:表示空格
    //14: \S:表示 除了 \s之外 的字符
    //15. 量词
    //15.1 *: 表示 >=0
    //15.2 +: 表示 >=1
    //15.3 ?: 表示 0次或1次
    //15.4 {11}: 表示 恰好11次
    //15.5 {3,5}: 表示 至少3次,最多5次
    //15.6 {3,}: 表示 至少3次,最多不限
    //贪婪模式
    //正则匹配默认是贪婪模式的
    //16. ? 非贪婪模式,加在量词后面
    //在如下字符串中 查找 满足正则表达式要求的内容
//    val str ="i am abc"
    //找到第一个满足条件的
//    val rs=reg1.findFirstIn("i am abc abc")
//    if (!rs.isEmpty){
//      println("找到的是:",rs.get)
//    }
    //找全部的
//    reg1.findAllIn("13612343314").toList.foreach(println)
//    reg1.findAllIn("i am abc abc").toList.foreach(println)
//    reg1.findAllIn("i am abc a!c a!!c").toList.foreach(println)
//    reg1.findAllIn("i am abc a!c a!!c 1 2 3").toList.foreach(println)
//    reg1.findAllIn("136123456781").toList.foreach(println)   //贪婪
//    reg1.findAllIn("136123456781").toList.foreach(println)    //非贪婪

    //正则查找
    //找全部的手机号
    //规则:
    //1.11位数字
    //2.第一个数字是1
    //3.第二个数字是3—9的数
//    val reg1 = "1[3-9]\\d{9}".r
//    reg1.findAllIn("136123456781 and 13838765432 01812345678 1181212345678 are phone numbers").toList.foreach(println)   //正则查找

    //验证: 给定字符串是否符合正则表达式的要求
    //用户名的规则
    //1. 长度在 6-12 位
    //2. 只能以字母开头
    //3. 只能包含如下4种:字母,数字,下划线,#
    val name1="_56!!@@@.com"//不符合
    val name2="abc"//不符合
    val name3="admin123#"
    val reg2="[a-zA-Z][a-zA-Z0-9_#]{5,11}".r
    //matches: 验证字符串是否满足
    println(reg2.matches(name1))
    println(reg2.matches(name2))
    println(reg2.matches(name3))
    println(reg2.matches("a12312313131313131313"))

    //应用:替换
    //要求把手机号的4-7位换成xxx
    //(136) (1234) (5678)
//    val reg1="1[3-9]\\d{9}".r
    val reg1="(1[3-9]\\d)(\\d{3})(\\d{5})".r
    val str="13812345678 and 13987654321 are phone numbers"
    val newStr=reg1.replaceAllIn(str,m=>{
//      println(m.group(1))
//      println(m.group(2))
//      println(m.group(3))
      m.group(1) + "###" + m.group(3)
    })
    println(newStr)
  }
}
相关推荐
视***间1 分钟前
视程空间AIR系列——小体积藏强芯,赋能机器人/机器狗全域落地
大数据·人工智能·机器人·机器狗·ai算力·视程空间
Legendary_0086 分钟前
解析 PD Sink 与 LDR6500U:Type-C 取电的核心密码
c语言·开发语言
冴羽yayujs12 分钟前
JavaScript 9 个先有库再有 API 的故事
开发语言·javascript·ecmascript
回忆2012初秋15 分钟前
.NET 8.0 实战:基于 MQTTnet 封装高可用的 MQTT 发布/订阅工具类
开发语言·mqtt·.net
江苏赛融科技21 分钟前
打破传统管理壁垒,智慧园区重构楼宇资产管理模式
大数据·人工智能·智慧园区·楼宇资产管理·楼宇智能化
油丶酸萝卜别吃30 分钟前
JavaScript 深度合并函数 deepMerge 实现指南(附完整测试用例)
开发语言·javascript·测试用例
念恒1230635 分钟前
Python(for循环进阶)
开发语言·python
没有梦想的咸鱼185-1037-16631 小时前
农业普查大数据与AI融合的数字农业与粮食安全智慧决策
大数据·人工智能·chatgpt·数据分析
AI玫瑰助手1 小时前
Python运算符:算术运算符(加减乘除取模幂)详解
开发语言·python
xiaoye-duck1 小时前
Qt 信号与槽深度解析:connect 用法、自定义信号槽与 Lambda 实战
开发语言·qt