正则表达式

一.正则表达式的语法

字符:

字符含义
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号:
11113333
qq号码正确

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值