单个数字的正则表达式对象

7 阅读2分钟
object reg01 {
  def main(args: Array[String]): Unit = {
    // 1.定义正则表达式。在scala中,字符串的后边+r,就定义了一个正则表达式
    // 2. 给定要检查(查找)的目标字符串
    // 3. 调用正则的方法,输出结果
    // 例子:判断给定字符串中是否有数字?

    // 1. 定义正则达
    val reg = """\d""".r

    // 2. 给定要检查(查找)的目标字符串
    val target = "I like 我喜欢 数字 3,6,8! "

    println("找到的结果是:")
    reg.findAllIn(target).foreach(println)
  }
}

val reg = """\d""".r

这句话的作用是定义一个匹配单个数字的正则表达式对象,拆解来看:

  1. """\d""" :这是 Scala 的 ** 多行字符串(原始字符串)** 写法,这里用来表示正则表达式的 “匹配单个数字” 规则(\d是正则中表示 “任意数字(0-9)” 的元字符)。用"""包裹可以避免对``进行额外转义(普通字符串中需要写"\d",而原始字符串中直接写"\d"即可)。
  2. .r:这是 Scala 字符串的一个隐式方法(来自scala.util.matching.Regex的隐式转换),作用是把字符串转换为正则表达式对象Regex类型)。
object reg03 {
  def main(args: Array[String]): Unit = {
    // 1. 定义正则
    // val reg = "^\d{11}$".r 
    // val reg = "^1\d{10}$".r  // 第一位是1, 后边跟10个数字

    // 手机号的第二位: 3,5,6,7,8,9
    // val reg = "^1[356789]\d{9}$".r  // 第1位是1, 第2位是356789中的某一个, 后边跟9个数字

    // 手机号的第二位: 3,5,6,7,8,9
    val reg = "^1[356789]\d{9}$".r  // 第1位是1, 第2位是356789中的某一个, 后边跟9个数字

    // 2. 给定要检查(查找)的目标字符串
    val target = "14276245321"

    println("找到的结果是: ")
    reg.findAllIn(target).foreach(println)

    // println("\t") // tab
  }
}

关键逻辑与运行结果

  1. 正则规则:仅匹配「1 开头 + 第二位 3/5/6/7/8/9 + 后 9 位数字」的 11 位手机号;
  2. 目标字符串14276245321 的第二位是 4,不符合正则规则;
  3. 运行结果:控制台打印 找到的结果是: 后无任何匹配内容(因为目标字符串不符合规则)。

扩展说明

  • 若将 target 改为 13812345678(第二位是 3),运行后会输出 13812345678

  • Scala 的 Regex 类提供了丰富的匹配方法:

    • findFirstIn:查找第一个匹配项;
    • matches:判断整个字符串是否完全匹配(返回 Boolean);
    • replaceAllIn:替换所有匹配项。