正则表达式

定义一个正则表达式:val reg="abc".r

1.[ab]:表示匹配一个字符,或者是a或者是b

2.[a-z]:表示从a到z中的26个字母中的任意一个

3.[A-Z]:表示从A到Z中的26个字母中的任意一个

4.[0-9]:表示从0到10中的任意一个

4.1[^ab]:表示匹配一个字符,除a,b之外的

5.{11}:表示前面的字符能出现11次

6.脱字符^如果在正则的最前面,表示要匹配的内容必须在字符串的开头

7.脱字符$如果在正则的最后面,表示要匹配的内容必须在字符串的结尾

8.英文的.:表示除了换行之外的其他的任意一个字符

9.\d:表示0-9的一个数字

10.\D:表示除\d之外的字符

11.\w:[a-zA-Z0-9_]63个字符中任意一个,“一个字”

12.\W:表示除\w之外的字符

13.\s:表示 空格

14.\S:表示 除 \s之外的字符

def main(args: Array[String]):Unit={
  val reg="abc".r
    //在如下字符串中 查找 满足正则表达式要求的内容
    val str="i am abc"
    //找到第一个满足条件的
    val rs=reg1.findFirstIn("i am abc abc")
    if(!rs.isEmpty){
      println("找到的是:",rs.get)
    }
    //找全部的
    reg1.findAllIn("i am abc abc").toList.foreach(println)
}
15.量词
15.1 *:表示 >=0
15.2 +:表示 >=1
15.3 ?:表示0次或者1次
15.4 {11}:表示恰好11次 {3,5}至少3次,最多5次。
16.贪婪模式 :正则匹配默认是贪婪模式(默认输出多的)
17 ?为非贪婪模式,加在量词后面 
实例:找全部的手机号
     规则:1.11位数字
             2.第一个数字是1
             3.第二个数字是3-9的数
val reg1="1[3-9]\\d{9}".r
  reg1.findAllIn("13812345678 and 0493482132 12439203302 102384920023 are phone numbers").toList.foreach(println)
实例:
验证:给定的字符串是否符合正则表达式的要求
用户名的规则
1.长度在6-12位
2.只能以字母开头
3.只能包含如下4种:字母,数字,下划线,#
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))
应用:替换
要求把手机号的4-7位换成xxxx
(136) (1234) (5678)

  val 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)

你可能感兴趣的:(正则表达式,scala,大数据)