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
这句话的作用是定义一个匹配单个数字的正则表达式对象,拆解来看:
"""\d""":这是 Scala 的 ** 多行字符串(原始字符串)** 写法,这里用来表示正则表达式的 “匹配单个数字” 规则(\d是正则中表示 “任意数字(0-9)” 的元字符)。用"""包裹可以避免对``进行额外转义(普通字符串中需要写"\d",而原始字符串中直接写"\d"即可)。.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 开头 + 第二位 3/5/6/7/8/9 + 后 9 位数字」的 11 位手机号;
- 目标字符串:
14276245321的第二位是 4,不符合正则规则; - 运行结果:控制台打印
找到的结果是:后无任何匹配内容(因为目标字符串不符合规则)。
扩展说明
-
若将
target改为13812345678(第二位是 3),运行后会输出13812345678; -
Scala 的
Regex类提供了丰富的匹配方法:findFirstIn:查找第一个匹配项;matches:判断整个字符串是否完全匹配(返回 Boolean);replaceAllIn:替换所有匹配项。