\\d 是正则表达式的表现方式
object Test{
def main(args: Array[String]): Unit = {
//1.定义规则。写正则表达式
val reg ="\\d".r
//2.在目标字符串中,去按照这个规则去找符合的子字符串
val result = reg.findFirstIn("我是jj,电话为:12345")
if(!result.isEmpty){ //检查结果是否为空 !,表示取反
println(result.get)//打印结果
}
println("-"*40)
reg.findAllIn("我是jj,电话为:12345").toList.foreach(println)
}
}
运行结果:
常见规则
val reg ="\\d".r // \d表示数字 val reg ="\\D".r //\D表示非数字 val reg ="\\w".r // \w表示一个字:0-9 a-z A-Z _ val reg ="\\W".r //\W表示一个非子:除了0-9 a-z A-Z _之外的 val reg ="a\\sb".r // \s表示一个空格 val reg = "a\\Sb".r //\S匹配一个非空白字符 val reg ="[a-zA-Z]".r //a-z,A-Z中的某一个 val reg ="[^a-zA-Z]".r //不是a-z,A-Z中的某一个 val reg ="a.c".r //a和c之间有一个字符。 .表示除了换行之外的其他任意的一个字符 val reg = "a*".r val reg = "(ab)+".r val reg = "A{5}".r
val reg = "a*".r //*表示前面的规则0次 val reg = "ab+".r //+表示前面的规则1次 val reg = "ab?".r //?表示前面的规则0次或1次 val reg = "ab{3}".r //{3}表示前面的规则3次 val reg = "ab{3,}".r //{3,}表示前面的规则3次+ val reg = "ab{3,5}".r //{3,5}表示前面的规则3次~5次
寻找手机号
val reg = "1[3-9]\\d{9}".r
//规则:
// 1.数字1是第一个字符
// 2.第二个字符是3-9
// 3.其他是数字,一共有9个数字
reg.findAllIn("15599038274刀削面,19747637928五花肉3,19822338658")
案例:判断用户名是否合法
规则
1.字符串的长度在6~12
2.只能包含:a-z,A-Z,0-9,_,-
3.不能以数字开头
val name1="abc" //不合法。 长度不够
val name2= "abc1234567890"//不合法,长度太长
val name3 = "ajnds123_" //合法
val name4 = "1ajnds123_" //不合法,数字开头
//正则表达式
val reg = "[a-zA-Z_-][0-9a-zA-Z_-]{5,11}".r
println(reg.matches(name1))
println(reg.matches(name2))
println(reg.matches(name3))
println(reg.matches(name4))
手机号隐藏
val str = "19747637928 and 19822338658 are phone numbers";
val reg = "(\\d{3})(\\d{4})(\\d{4})".r //能匹配手机号的正则表达式
//任务:把str中的手机号的中间3-4替换为*
var str1 = reg.replaceAllIn(str, m => {
println(m.group(1))
println(m.group(2))
println(m.group(3))
m.group(1) + "****" + m.group(3)
})
println(s"替换之后的字符串是:${str1}")