正则表达式应用-手机号打码

37 阅读3分钟

(一)正则表达式的定义

正则表达式(Regular Expression)是一种用于匹配、查找和替换文本中特定模式的字符串。

(2)第一个正则表达式的案例

要点:
1. 在scala中,正则表达式就是在字符串的后面添加.r。
2. \\是对\进行转义。\d是一个整体,用来表示一个整数。
【总结正则表达式的使用步骤】
1. 定义匹配规则。写正则表达式
2. 定义数据,准备要匹配的内容。
3. 将字符串使用规则进行匹配。
package reg
/**
 * 1·什么是正则表达式
 *    正则表达式是一种用来匹配字符串的强大工具,  它由普通字符 (例如字符 a 到 z)和特殊字符(称为"元字符")组成。
 *
 *2·使用步骤
 *    (1)、定义正则表达式。"".r
 *    (2)、调用正则表达式的方法
 *3·规则
 * (1)\d 表示一个数字
 * (2)\d{5} 表示5个数字  {n} 量词 。让前面规则重复n次
 */
object reg01 {
  def main(args: Array[String]): Unit = {


    // 定义一个正则表达式
    //val reg = "\d\d".r  //两个相邻的数字
    val reg = "\d{5}".r    //5个相邻的数字
    // 1、匹配。在目标字符串中,把符合正则表达式要求内容,找出来。
    val source = "67891 2105 in abc"
    reg.findAllIn(source).foreach(println)

    // 2、验证。检查给定目标字符串,是否符合正则表达式的要求。
    //reg.matches()
    //转义字符   \  改变后面字符的含义
    //    \d ---->  表示数字
    //    \n ---->  表示换行
    //    \t ---->  表示制表符
  }

}

(三)匹配合法手机号

1. 匹配一个数字。\\d
2. 匹配两个数字。\\d\\d
3. 匹配11个数字。\\d{11}
4. 匹配11个数字,并且以1开头。1\\d{10}
5. 只能匹配11个数字,不能多也不能少。^1\\d{10}$
6. 第2位可以是3,5,6,7,8,9。^1[356789]\\d{9}$
package reg

/**
 * 目标:在给的字符串中,匹配合法的手机号
 *    1·有11个连续的数字
 *    2·手机号以1开头
 *    3·手机号第二位是3、5、7、8、
 *3·规则
 * (1)\d 表示一个数字
 * (2)\d{5} 表示5个数字  {n} 量词 。让前面规则重复n次
 * (3)\b 表示单词边界  空格,或者是开始
 * (4)[]. 表示其中任意一个字符,[3,5,7,8] 就是4个数字中的一个,[3-9]就是3456789中的某一个 [a-z]表示26个字母中的某一个
 *
 */
object reg02 {
  def main(args: Array[String]): Unit = {
      val reg = "\b1[3578]\d{9}".r    //1的后面跟着3,5,7,8,后面跟着9个相邻的数字
      val source = "13644565651 14534789035 534142435465757"
      reg.findAllIn(source).foreach(println)


   // val reg = "\d{11}".r
    //val source = "67891 2105 in abc"
    //reg.findAllIn(source).foreach(println)


  }

}

(四)matchs方法

package reg

/**
 * 2·正则表达式
 * (5)^ 表示开始
 * (6)$ 表示结束
 */
object reg02 {
  def main(args: Array[String]): Unit = {
      val reg = "^1[3578]\d{9}$".r    //1的后面跟着3,5,7,8,后面跟着9个相邻的数字


      println(reg.matches("a13644565651")) //true
      println(reg.matches("13644565651")) //true
      println(reg.matches("1364456565")) //false
      println(reg.matches("136445656511")) //false


  }

}