正则表达式

来源:互联网 发布:excel如何筛选数据 编辑:程序博客网 时间:2024/06/05 17:21

一.正则表达式的语法

字符:

字符 含义 x 字符x \\ 反斜线字符 \t 制表符 \n 换行符 \r 回车符

字符类:

字符类 含义 [abc] a、b 或 c(简单类) [^abc] 任何字符,除了 a、b 或 c(否定) [a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围) [a-zA-Z_0-9] 里面包含大写字母或者小写字母或者数字字符

预定义字符:

预定义字符 含义 . 任何字符 \d 数字0-9 \w 单词字符:[a-zA-Z_0-9]

注意:写作\\d和\\w
边界匹配器:

边界匹配器 含义 ^ 行的开头 $ 行的结束 \b 单词边界

Greedy 数量词:

Greedy 数量词 含义 X? x出现1次或者0次 X* x出现0次或多次 X+ x出现1次或多次 X{n} x恰好出现n X{n,} x至少出现n次 X{n,m} X至少出现n次,但是不超过m次

二.String类和正则表达式

  1. public String[] split(String regex):根据给定正则表达式的匹配拆分此字符串
  2. public String replaceAll(String regex,String replacement):使用给定的replacement替换此字符串所有匹配给定的正则表达式的子字符串
public class Demo1 {    public static void main(String[] args) {        //定义一个字符串        String s = "aa-bb-cc";        //-将字符串分割        String[] arr = s.split("-");        for(int x = 0 ; x < arr.length ; x ++){            System.out.print(arr[x]+" ");        }        System.out.println();        String a = "hello123worldjava123456";        //数字出现一次或多次        String m = "\\d+";        String n = "*";        //用*替换数字        String h = a.replaceAll(m, n);        System.out.println(h);    }}结果:aa bb cc hello*worldjava*

三.正则表达式的综合练习

1.校验QQ

import java.util.Scanner;/*校验qq: *      规则:5-15位的一个数字 *          不能以0开头 */public class Demo2 {    public static void main(String[] args) {        //创建键盘录入对象        Scanner sc = new Scanner(System.in);        System.out.println("请输入qq号:");        String qq = sc.nextLine();        method(qq);    }    //校验qq的方法    public static void method(String qq){        //不能以0开头,5-15位的数字        String s = "[1-9][0-9]{4,14}";        if(qq.matches(s)){            System.out.println("qq号码正确");        }else{            System.out.println("qq号码错误");        }    }}结果:请输入qq号:11113333qq号码正确

2.校验邮箱

import java.util.Scanner;/*邮箱的几种形式:122444555@qq.com       zhangsan@163.com                    zhangsan@westos.com.cn                  zhangsan@sina.com.cn */public class Demo3 {    public static void main(String[] args) {        //创建键盘录入对象        Scanner sc = new Scanner(System.in);        System.out.println("请输入邮箱:");        String yx = sc.nextLine();        method(yx);    }    //校验邮箱的方式    public static void method(String yx){        String a = "[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,6}(\\.[a-z]{3})(\\.[a-z]*)";        if(yx.matches(a)){            System.out.println("正确");        }else{            System.out.println("错误");        }    }}结果:请输入邮箱:zhangsan@qq.com.cn正确

三.模式对象和匹配器对象的应用顺序

  1. Pattern:模式对象

    • public static Pattern compile(String regex):将给定的正则表达式编译成要给模式对象
    • public Matcher matcher(CharSequence input):创建匹配给定输入与此模式的匹配器
  2. Matcher:匹配器对象

    • public boolean matches():尝试将整个区域与模式匹配
  3. 模式和匹配器对象的典型顺序:

    • 将正则规则编译成要给的模式对象(返回一个模式对象)
    • 使用模式对象去调用一个matcher()返回一个匹配器对象
    • 然后再调用匹配器对象的一些功能
import java.util.regex.Matcher;import java.util.regex.Pattern;public class Demo4 {    public static void main(String[] args) {        Pattern p = Pattern.compile("a*b");        Matcher m = p.matcher("aaaab");        boolean flag = m.matches();        System.out.println(flag);    }}结果:true