Java基础之正则表达式

前言

关于正则表达式的相关知识链接:
https://baike.sogou.com/kexue/d11077.htm?ch=fromsearch(该链接的目录语法部分)

面试题:

问:请你简单描述一下正则表达式及其用途?
答:在编写处理字符串的程序时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。计算机处理的信息更多的时候不是数值而是字符串,正则表达式就是在进行字符串匹配和处理的时候最为强大的工具,绝大多数语言都提供了对正则表达式的支持。

1. String类提供的一些方法

String类提供的一些对象里面是可以用正则表达式的。
比如:
① matches方法,可以得到字符串中是否存在与正则表达式匹配的字符串,返回结果是布尔类型;

String str1="I want too a nice jooob!";
System.out.println(str1.matches("I(.*)I"));//是否以I开头

结果:

true

② replaceAll方法和replaceFirst方法,可以将字符串中与正则表达式匹配的字符串替换掉,返回结果是替换后的字符串;

		//这两种的结果是不一样的
        System.out.println(str1.replaceAll("o+","O"));//直到检测的下一个字符是false时,才会进行下一次重新匹配检查
        System.out.println(str1.replaceAll("o{1}","O"));//只要该字符匹配了,就会进行下一次重新匹配检查

        System.out.println(str1.replaceFirst("o+","O"));

结果:

I want tO a nice jOb!
I want tOO a nice jOOOb!
I want tO a nice jooob!

③ split方法,可以将字符串中与正则表达式匹配的字符串作为分隔符对原来字符串进行分割,返回结果是分割好的字符串数组。

		String str2="I need to work hard !";
        String[] str2Array=str2.split("\\s");
//        String[] str2Array=str2.split(" ");//和上面一条语句的执行结果是一样的
        for(String s:str2Array){
            System.out.println("str2Array:"+s);
        }

结果:

str2Array:I
str2Array:need
str2Array:to
str2Array:work
str2Array:hard
str2Array:!

2. Pattern类和Matcher类

2.1 步骤

主要分为三步:
① 将正则表达式转为模板

Pattern pattern = Pattern.compile("a*b");

② 模板调用匹配方法,得到匹配器

Matcher matcher = pattern.matcher("aaaaabcaabb");

③ 使用匹配器获取结果,处理逻辑

		while(matcher.find()) {
            System.out.println(matcher.group());
        }

总的来看就是:

		//Pattern和Matcher用法练习
        Pattern pattern = Pattern.compile("a*b");//将正则表达式转为模式(理解:转为固定的东西,用以很多个字符串的匹配)【准备模板】

        Matcher matcher = pattern.matcher("aaaaabcaabb");//模式对象里面有matcher方法进行字符串的匹配,该方法的参数是需要匹配的字符串,返回结果是一个匹配器对象【调用模板匹配】

        //【查看结果】
//        boolean b = matcher.matches();//匹配器的matches()方法可以知道整个字符串有没有匹配成功,注意是整个字符串,而且调用这个方法后,后面的find和group等方法的调用都是没有意义的,而且这个方法是会改变匹配器对象的
//        System.out.println("matches result:"+b);

        while(matcher.find()) {//find方法可以循环匹配器内容,看看有没有匹配结果,有点像迭代器(如果知道只可能匹配一个结果或者只想得到一个结果,可以用if代替while)
            System.out.println(matcher.group());//group方法可以得到匹配到的字符串,在循环里面使用,得到当前循环到的结果字符串
        }

结果:

aaaaab
aab
b

2.2 匹配器更多方法

参考链接:
https://www.cnblogs.com/sqp51312/p/6134324.html(很详细,还有实例)

比如:
在这里插入图片描述

3. 常用正则表达式

参考链接:
https://zhuanlan.zhihu.com/p/33013618
比如:
① Email地址:^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$
② 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
③ 手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
④ 身份证号(15位、18位数字):^\d{15}|\d{18}$
⑤ 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):… …

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值