正则表达式是处理字符串的强大工具,它可以帮我们快速实现字符串的查找、匹配、校验等操作,且跨编程语言通用。本文将以 Scala 语言为例,从基础的数字查找入手,逐步进阶到手机号格式的精准匹配,带你掌握 Scala 中正则表达式的核心用法。
一、正则表达式核心概念
在开始编码前,先明确几个核心概念:
- 元字符:具有特殊含义的字符,如
\d表示任意单个数字、[]表示字符范围; - 量词:指定规则重复次数,如
{11}表示前面的规则重复 11 次; - 边界符:
^表示字符串开头、$表示字符串结尾,用于精准匹配整串内容。
二、基础案例:查找字符串中的 11 位数字
首先实现一个简单需求:从目标字符串中查找是否存在 11 位连续数字。
1. 完整代码
package reg
/*
1.处理字符串
2.查找,在一个大的字符串中寻找是否也满足 规则(条件)的子串
3.匹配,效验。判断给定的字符串是否满足某些 规则(条件)
这里规则(条件)就是采用正则表达式写的特殊的字符串
正则表达式与具体的编程语言无关
是一个独立通用的计算机技术
*/
object reg01 {
def main(args: Array[String]): Unit = {
// 1.定义正则表达式
// 2.给定要检查(查找)的目标字符串
// 3.调用正则的方法,输出结果
// 判断给定字符串是否有数字?
// 1.\d:它可以表示任意的一个数字!
// 量词:表示前面的规则要重复几次?
// 1.{11}:表示重复11次 \d{11}它可以表示一个11位的数字
// 1.定义正则表达式
val reg = "\d(11)".r
// 2.给定要检查(查找)的目标字符串
val target = "I like 我喜欢 数字 13456789456! "
println("找到的结果是:")
reg.findAllIn(target).foreach(println)
// println("\") //tab
}
}
三、进阶案例:精准匹配手机号格式
手机号有固定格式要求:
- 长度为 11 位;
- 第一位必须是 1;
- 第二位只能是 3/5/6/7/8/9;
- 后 9 位为任意数字。
2. 完整代码
package reg
/*
1.处理字符串
2.查找,在一个大的字符串中寻找是否也满足 规则(条件)的子串
3.匹配,效验。判断给定的字符串是否满足某些 规则(条件)
这里规则(条件)就是采用正则表达式写的特殊的字符串
正则表达式与具体的编程语言无关
是一个独立通用的计算机技术
*/
object reg02 {
def main(args: Array[String]): Unit = {
// 1.定义正则表达式
// 2.给定要检查(查找)的目标字符串
// 3.调用正则的方法,输出结果
// 判断给定字符串是否有数字?
// 1.\d:它可以表示任意的一个数字!
// 2.[3,5,6,7,8,9]只能固定字符中的某一个
// 量词:表示前面的规则要重复几次?
// 1.{11}:表示重复11次 \d{11}它可以表示一个11位的数字
// ^以此开头 ^\d{11} 必须是以11个数字开头的字符串
// $以此结尾 \d{11}$ 必须是以11个数字结尾的字符串
// \d{11}$:必须是以11个数字开头并且以11个数字结尾的字符串
// 1.定义正则表达式
// val reg = "^1\d(10)$".r //第一位是1,后边跟10个数字
// 手机号的第二位3,5,6,7,8,9
val reg = "^1[356789]\d(9)$".r //第一位是1,后边跟10个数字
// 2.给定要检查(查找)的目标字符串
val target = "1345678456"
println("找到的结果是:")
reg.findAllIn(target).foreach(println)
// println("\") // tab
}
}