//8.英文的.:表示除了换行之外的其他的任意字符
//9.\d:表示0-9的一个数字
//10.\D:表示 除\d 之外的字符
//11. \w:[a-zA-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次
//贪婪模式
//正则匹配默认是贪婪模式的
//16 ? 非贪婪模式。 加在量词的后面
//在如下字符串中 查找 满足正则表达式要求的内容
//val str ="i am abc"
// LA 找到一个满足条件的
// val rs = reg1.findFirstIn("i am abc")
// if(!rs.isEmpty){
// println("找到的是:",rs.get)
// }
//找全部的手机号
//规则:
//1.11位数字,
//2.第一个数字是1
//3.第二个数字是3-9的数
//val reg1 = "1[3-9]\\d{9}".r
//reg1.findAllIn("13812345678 and 13987654321 01812345678 11812345678 are phone numbers").toList.foreach(println)
// B 验证: 给定的字符串是否符合正则表达式的要求
//用户名的规则
//1. 长度在6-12位
//2. 只能以字母开头
//3. 只能包含如下4种: 字母, 数字, 下划线 #
//规则分析:合法用户1名通常允许包含大小写字母(a-z,A-Z),数字(0-9)以及下划线(_),用户名长度一般限定在3到20位之间,且不能以数字开头。
// val name1 ="_56!!!@@@.com"//不符合
// val name2 ="abc"
// val name3 ="admin123#"
// val reg2 = "[a-zA-Z0-9_#]{6,12}".r
// //matches: 验证字符串是否满足
// println(reg2.matches(name1))
// println(reg2.matches(name2))
// println(reg2.matches(name3))
//println(reg2.matches("a1231231313131313"))
// C 应用: 替换
//要求把手机号的4-7位换成xxxx(打上马赛克)
//(136) (1234) (5678)
//val reg1 ="1[3-9]\\d{9}".r
val reg1 = "(1[3-9]\\d)(\\d{3})(\\d{5})".r
val str = "123 13812345678 and 13987654321 01812345678 11812345678 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)
}
}