package Scala12_3 //正则表达式 object Scala12_03 { def main(args: Array[String]): Unit = { // 1,[ab]:表示匹配一个字符,或者是a或者是b // 2.[a-z]:表示a到z的26个字母中的任意一个 // 3.[A-Z]:表示A到Z的26个字母中的任意一个 // 4.[0-9]:表示0到9的10中的任意一个 // 4.1[^ab]:表示匹配一个字符,除a,b之外的 // 5.{11}:表示前面的字符能出现11次、 // 定义一个正则表达式 // val reg1 = "^[0-9]{11}".r // val reg1 = "\\w".r // 6.脱字符^如果在正则的最前面,表示,要匹配的内容必须在字符串的开头 // 7.脱字符$如果在正则的最后面,表示,要匹配的内容必须在字符串的结尾 // 8.英文的 . :表示除了换行之外的其他任意一个字符 // 9.\d:表示0-9的一个数字 // 10.\D:表示除d之外的字符 // 11.\w:[a-zA-Z0-9_]63个字符中任意一个 // 12.\W:除[a-zA-Z0-9_]63个字符中不是字符的任意一个 // 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次 // 15.6 {3,}最少3次最多不限 // 贪婪模式 // 正则匹配默认为贪婪模式 // 16 ? 非贪婪模式 // val reg1 = "abc".r // 在如下字符串中 查找 满足正则表达式要求的内容 // val str = "i am abc" // 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("1361272342333 hgef:14334565761,邮编:433100 sfgsd _osdgbj;asdf").toList.foreach(println) // 验证:给定的字符串是否符合正则表达式的要求 // 用户名的规则 // 1.长度在6-12位 // 2.只能以字母开头 // 3.只能包含4种字母,数字,下划线,# // val name1 = "_354!!@@.com" // val name2 = "abc" // val name3 = "adimn123#" // val reg2 = "[a-zA-Z][a-zA-Z0-9_#]{5,11}".r // println(reg2.matches(name1)) // println(reg2.matches(name2)) // println(reg2.matches(name3)) // println(reg2.matches("a24235235234253fhhgkdfshsjarewgo;jasjkdgp3oio1234ryweqpt9eg")) // // val reg1 = "(1[3-9]\\d)(\\d{3})(\\d{5})".r // val str = "13612723423 hgef:14334565761,邮编:433100 sfgsd _osdgbj;asdf" // val newStr = reg1.replaceAllIn(str,m =>{ // m.group(1) +"###" +m.group(3) // }) // println(newStr) // reg1.findAllIn("1361272342333 hgef:14334565761,邮编:433100 sfgsd _osdgbj;asdf").toList.foreach(println) val reg1 = "(4[2-9]\\d{4})(\\d{8})(\\d{4})".r val str = "13612723423 hgef:14334565761,邮编:433100 sfgsd _osdgbj;asdf,420321492923994478" val newStr = reg1.replaceAllIn(str, m => { m.group(1) + m.group(2)+ "####" }) println(newStr) } }