正则表达式及在Java中的应用

文章目录

    • 一、正则表达式
      • 1. 正则表达式的概述及用法
      • 2. 正则表达式的组成规则
      • 3. 正则表达式的判断方法matches
      • 4. 正则表达式的分割方法split
      • 5. 正则表达式的替换方法replaceAll
      • 6. 正则表达式的获取方法及模式器和匹配器

一、正则表达式

1. 正则表达式的概述及用法

  • 正则表达式

    • 具有自己独特的语法,非某一门语言所独有,不过许多语言都支持正则表达式
    • 是指用来描述或匹配一系列符合某个句法规则的字符串的单个字符串,或者说就是一种规则,比如邮箱的格式、手机号的格式、身份证号的格式等
  • 邮箱正则表达式的判定

    String PHONE_NUMBER_REG = "^(1[3-9])\\d{9}$";
    • 前一位必须是1,第二位是3-9之间的任意一个数,后9位为数字

2. 正则表达式的组成规则

  • 规则字符在java.util,regex Pattern类中

  • 字符

    • 单个字符表示其本身
    • \\反斜杠字符
    • \n 换行符
    • \r 回车符
  • 字符类

    • [abc]
      • a或b或c
    • [^abc]
      • 除了a、b、c之外的任意字符
    • [a-zA-Z]
      • 小写字母和大写字母
    • [0-9]
      • 0-9之间的数字
  • 预定义字符类(有特殊含义的)

    • .
      • 任意字符(如果想表示点,可以用 \. )
    • \d
      • 0-9间任意数字
    • \w
      • 单词字符,相当于[a-zA-Z_0-9],包含字母数字下划线
  • 边界匹配器

    • Java中一般不强调
    • ^
      • 行的开头
    • $
      • 行的结尾
    • \b
      • 单词边界,也就是不是单词的字符(除了字母数字下划线)
  • 数量词

    • ?
      • 一次或一次也没有
    • *
      • 几次都可以,0次也行
    • +
    • 至少一次,可以是多次
    • {n}
      • 刚好是n次
    • {n,}
      • 至少是n次
    • {n,m}
      • 至少n次,最多m次

3. 正则表达式的判断方法matches

  • String类的方法
    • public boolean matches(String regex)
    • 判断一个字符串是否满足一定的规则(参数正则表达式)
  • 校验手机号
public static void main(String[] args) {String PHONE_NUMBER_REG = "^(1[3-9])\\d{9}$";//正则表达式String phoneNumber = "13766666666";//手机号boolean b = phoneNumber.matches(PHONE_NUMBER_REG);//判断手机号是否满足正则表达式的规则System.out.println(b);//打印判断结果}
//输出结果:true

4. 正则表达式的分割方法split

  • public String[] split(String regex)
    • 按照一定的(规则)正则表达式,以满足要求的字符串为边界,将原字符串截成小的字符串,分别存储在字符数组中
  • 将给定字符串中的数字排序
    • 有如下一个字符串:”91 27 46 38 50”,请写代码实现最终输出结果是:”27 38 46 50 91”
public static void main(String[] args) {String str = "91         27  46      38 50";String REG = " +";//正则表达式String[] starArr = str.split(REG);//得到截取的数字字符串int[] endArr = new int[starArr.length];//定义中间数组存放int型数据for (int i = 0; i < starArr.length; i++) {//遍历转换为int型并赋值endArr[i] = Integer.valueOf(starArr[i]);}Arrays.sort(endArr);//调用方法排序System.out.println(Arrays.toString(endArr));//打印}
//输出结果:[27, 38, 46, 50, 91]

5. 正则表达式的替换方法replaceAll

  • public String replaceAll(String regex,String replacement)

    • 将满足正则表达式的字符串替换成指定字符串
  • 用途

    • 敏感词替换
    • 将数字替换成 “*”
public static void main(String[] args) {String str = "今天2019年11月11日!";String REG = "[\\d]";//正则表达式String endsStr = str.replaceAll(REG, "*");//将满足正则表达式的字符串替换成“*”System.out.println(endsStr);//打印}
//输出结果:今天****年**月**日!

6. 正则表达式的获取方法及模式器和匹配器

  • Pattern

    • 模式器
  • Matcher

    • 匹配器
  • 模式器和匹配器的典型调用顺序

public static void main(String[] args) {Pattern pat = Pattern.compile("a*b");//正则表达式,模式器Matcher mat = pat.matcher("aaaaab");//要匹配的字符串,匹配器boolean b = mat.matches();//匹配器调用方法查看字符串是否满足正则表达式System.out.println(b);}
  • find方法和group方法
    • find
      • 寻找下一个满足正则表达式的字符串,找到返回true
    • group
      • 返回寻找到的的字符串
    • 找出字符串中由三个字符组成的单词
public static void main(String[] args) {String str = "da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?";String REG = "\\b[a-z]{3}\\b";Pattern pat = Pattern.compile(REG);//正则表达式,模式器Matcher mat = pat.matcher(str);//要匹配的字符串,匹配器while (mat.find()) {//当找到满足正则表达式的字符串String group = mat.group();//截取System.out.println(group);//打印}}
//输出结果:jia jin yao xia wan gao