1.定义一个正则表达式
object test1 {
def main(args: Array[String]): Unit = {val reg1="\\S".r}
}
2.一些关于正则表达式的方法
//1.[ab]:表示匹配一个字符,或者是a或者是b//2.[a-z]:表示从a到z的26个子母中的任意一个//3.[A-Z]:表示从A到Z的26个子母中的任意一个//4.[0-9]:表示从0到9的中的任意一个//4.1[^ab]:表示匹配一个字符,除 a,b之外的//5.{11}:表示前面的字符出现11次 // val reg1="\\S".r//6.脱字符^ 如果在正则的最前面,表示:要匹配的内容必须在字符串的开头//7.脱字符$ 如果在正则的最后面,表示:要匹配的内容必须在字符串的结尾//8. 英文的.:表示除了换行之外的其他的任意一个字符//9.\d:表示0-9中的任意一个数字//10.\D:表示除\d外的字符//11.\w:表示[a-z A-Z 0-9 _]63个字符串中任意一个,"一个字"//12.\W:表示除\w外的所有//13.\s:匹配空白字符(空格)//14.\S:匹配非空白字符//15.量词//15.1 *:表示 >=0//15.2 +:表示 >=1//15.3 ?:表示0次或者1次//15.4 {11}:表示恰好11次 {3,5}至少3次,最多5次。//16.贪婪模式//正则匹配默认是贪婪模式//17 ?为非贪婪模式,加在量词后面
3.实例应用 找全部的手机号规则:
1.11位数字
2.第一个数字是1
3.第二个数字是3-9的数
object test1 {
def main(args: Array[String]): Unit = {val reg1="1[3-9]\\d{9}".rreg1.findAllIn("13812345678 and 0493482132 12439203302 102384920023 are phone numbers").toList.foreach(println)}
}
3.1验证:给定的字符串是否符合正则表达式的要求
用户名的规则
1.长度在6-12位
2.只能以字母开头
3.只能包含如下4种:字母,数字,下划线,#
代码如下:
object test1 {
def main(args: Array[String]): Unit = {val name1="_56!!@@@.com"//不符合val name2="abc"//不符合val name3="admin123#"val reg2="[a-zA-Z][a-zA-Z0-9_#]{5,11}".r//matches 验证字符串是否满足println(reg2.matches(name1))println(reg2.matches(name2))println(reg2.matches(name3))}
}
3.2 应用:替换
要求把手机号的4-7位换成xxxx,代码如下:
object test1 {
def main(args: Array[String]): Unit = {//(136) (1234) (5678)//val reg1="1[3-9]\\d{9}".rval reg1="(1[3-9]\\d)(\\d{3})(\\d{5})".rval str="123 13812345678 and 13987654321 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)}
}