Scala 的正则表达式

正则表达式的定义:

正则表达式是一种用于匹配,查找和替换文本中特定模式的字符串。

Scala 复制代码
object Test43 {
  def main(args: Array[String]): Unit = {
    //定义一个规则  正则表达式
    val reg="[123]".r

    //1. 查找。在目标字符串中,找到符合正则表达式规则要求的 子串
//    val rs=reg.findFirstIn("abc a")
//    if(!rs.isEmpty){
//      println("你找到的,符合正则表达式要求的内容是",rs.get)
//    }
    reg.findAllIn("1a 2bc a3d").toList.foreach(println)
  }
}
复制代码
//1. . 表示 除了换行之外的其他的任意单个字符
//2. \d 等于[0-9] 匹配一个数字 digit
//3. \D 除了\d 之外的其他任意字符。表示非数字
//4. \w 等价于[0-9A-Za-z_] 63个字符,表示一个字 word
//5. \W 除了\w之外的任意字符。表示非字
//6. \s 表示一个空格 space
//7. \S 表示一个非空格
Scala 复制代码
object Test43 {
  def main(args: Array[String]): Unit = {
//    println("a\tb")
    //定义一个规则  正则表达式
//    val reg="[a-2A-Z0-9]".r
    //val rge="^a$".r
    //1. . 表示 除了换行之外的其他的任意单个字符
    //2. \d 等于[0-9] 匹配一个数字 digit
    //3. \D 除了\d 之外的其他任意字符。表示非数字
    //4. \w 等价于[0-9A-Za-z_] 63个字符,表示一个字 word
    //5. \W 除了\w之外的任意字符。表示非字
    //6. \s 表示一个空格 space
    //7. \S 表示一个非空格
//    val reg=".".r
    val reg="\\s".r

    //1. 查找。在目标字符串中,找到符合正则表达式规则要求的 子串
//    val rs=reg.findFirstIn("abc a")
//    if(!rs.isEmpty){
//      println("你找到的,符合正则表达式要求的内容是",rs.get)
//    }
    reg.findAllIn("_Ai 1234am a12 no, y3es, ok,").toList.foreach(println)
  }
}

正则表达式的应用场景:

  1. 查找

  2. 验证

  3. 替换

案例一:验证用户名是否合法

规则:

  1. 长度在6-12之间

  2. 不能数字开头

  3. 只能包含数字,大小写字母,下划线

Scala 复制代码
  def main(args: Array[String]): Unit = {
    val name1="1admin"
    val name2="admin123"
    val name3="admin"
    val name4="ad_123Ab"
    val name5="admin123!"

    //通过正则表达式来判断
    val reg="[a-zA-Z_]\\w{5,11}".r
    println(reg.matches(name1))
    println(reg.matches(name2))
    println(reg.matches(name3))
    println(reg.matches(name4))
    println(reg.matches(name5))
  }

案例二:

复制代码
任务: 把字符串中的手机号打码:类似于:138****5678
Scala 复制代码
  def main(args: Array[String]): Unit = {
    var str="张先生,手机号:13812345678    你买的 xxx 到了"
    //开始你的代码
    //138   1234    5678

//    val reg="1[3-9]\\d{9}".r
    // () 是分组,它不会影响正则表达式的查询结果,但是,它会把分组找到的内容单独保存在group中。
    val reg="(1[3-9]\\d)(\\d{4})(\\d{4})".r
    //reg.replaceAllIn的功能:在目标字符串str中,用正则表达式reg去查找,找到之后,用 箭头函数 的返回值来替换。

    // m 就是正则表达式找到的内容
    // 如果正则表达式中有(),则 可以通过m.group来找到对应的分组
    val newStr=reg.replaceAllIn(str,(m)=>{
      println(s"第一组: ${m.group(1)}")
      println(s"第二组: ${m.group(2)}")
      println(s"第三组: ${m.group(3)}")
      println("-"*40)
      m.group(1)+"****"+m.group(3)
    })
    println(newStr)
  }

案例三:把字符串中的身份证号打码

Scala 复制代码
  def main(args: Array[String]): Unit = {
    var str="张先生,ID: 429005200001231156"
    val reg="(1[10-16]\\d)(\\d{6})(\\d[\\dX])".r
    val newStr=reg.replaceAllIn(str,(m)=> m.group(1)+"--------"+m.group(3))
//      println(m.group(1))
//      println(m.group(2))
//      println(m.group(3))
//      m.group(1)+"------"+m.group(3)
    println(newStr)
  }
相关推荐
Zsy_0510032 分钟前
【C++】类和对象(一)
开发语言·c++
星火开发设计1 小时前
Java面向对象三大特性:封装、继承与多态的深度解析及实战
java·开发语言·microsoft·多态·继承·面向对象·封装
旅途中的宽~1 小时前
【Python】pip install -v e .命令不想自动更新torch版本
开发语言·python·pip
lly2024061 小时前
Vue3 指令详解
开发语言
_OP_CHEN1 小时前
【从零开始的Qt开发指南】(二十三)Qt 界面优化之 QSS 实战指南:从入门到精通,让你的界面颜值飙升!
开发语言·c++·qt·前端开发·界面美化·qss·客户端开发
e***98571 小时前
Java性能优化实战:从原理到案例
java·开发语言·性能优化
HellowAmy1 小时前
我的C++规范 - 跳跃的对象
开发语言·c++·代码规范
lph0091 小时前
QtMqtt 的编译与QT环境加载配置
开发语言·qt
崇山峻岭之间2 小时前
Matlab学习记录35
开发语言·学习·matlab
比奇堡派星星2 小时前
Linux OOM Killer
linux·开发语言·arm开发·驱动开发