正则表达式

目录

1.正则表达式匹配对应规则

字符串:

常用的规则表

匹配字符串实例演示:

1.验证qq号是否合法:不以0为开头,6-20位数字以内

2.验证身份证号:

2.正则表达式在网络上爬取信息


1.正则表达式匹配对应规则

目录

1.正则表达式匹配对应规则字符串:

常用的规则表

匹配字符串实例演示:

1.验证qq号是否合法:不以0为开头,6-20位数字以内

2.验证身份证号:


字符串:

常用的规则表

字符类
[abc]a、b 或 c(简单类)
[^abc]任何字符,除了 a、b 或 c(否定)
[a-zA-Z]a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]]a 到 d 或 m 到 p:[a-dm-p](并集)
[a-z&&[def]]d、e 或 f(交集)
[a-z&&[^bc]]a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]]a 到 z,而非 m 到 p:[a-lq-z](减去)

预定义字符类
.任何字符(与行结束符可能匹配也可能不匹配)
\d数字:[0-9]
\D非数字: [^0-9]
\s空白字符:[ \t\n\x0B\f\r]
\S非空白字符:[^\s]
\w单词字符:[a-zA-Z_0-9]
\W非单词字符:[^\w]

Greedy 数量词
X?X,一次或一次也没有
X*X,零次或多次
X+X,一次或多次
X{n}X,恰好 n
X{n,}X,至少 n
X{n,m}X,至少 n 次,但是不超过 m

匹配字符串实例演示:

1.验证qq号是否合法:不以0为开头,6-20位数字以内

        String qq ="1a234567890";

        //书写正则表达式
        String regex = "[1-9]\\d{5,19}";
        //正则表达式验证
        System.out.println(qq.matches(regex));

其中[1-9]代表开头的第一位数字的取值范围,\d表示数字[0-9],{5,19}表示\d的位数。

细节:1.[1-9]表示了一位数字,所以后面的\d只能有5-19位

           2.之所以要用到\\d,是因为\在Java中的意思是转义字符

             如果写入正则表达式的是\d,那就是要给d进行转义,不符合我们的要求。

             第一个\是为了给第二个\进行转义,在Java运行时用到的还是\d。

2.验证身份证号:

        //写出身份证号的正则表达式
        //440903 2007 11 14 0621
        //1.前六位 (第一位不为0)(后面5位为任意数字)   [1-9]\\d{5}
        //2.年份,18,19,20     后面任意两位数字        (18|19|20)\\d{2}
        //3.1-9,10,11,12                            (0[1-9]|1[0-2])
        //4.0-31                                       (0[1-9]|[12]\\d|3[0-1])
        //5.任意数字出现三次,最后以为可为(数字,X,x)   \\d{3}(\\d|(?i)x)

        String regex="[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[0- 
        1])\\d{3}(\\d|(?i)x)";
        System.out.println("44090320071114062x".matches(regex));
        System.out.println("44090320071114062X".matches(regex));
        System.out.println("440903200711140621".matches(regex));

4.0-31可以看成由0[1-9],1[0-9],2[0-9],3[0-1]

细节:1.当使用|符号时,注意自己的作用域,用括号()包起来,如果不使用,就会默认|的前面               全部是你的作用域的范围

           2.(?i)的含义是忽略大小写

2.正则表达式在网络上爬取信息

 public static void main(String[] args) throws IOException {

        //1.创建一个URL的对象,即网址
        URL url=new URL("https://www.yuanss.cc/book/59062.html");

        //2.连接网络
        URLConnection conn = url.openConnection();

        //3.创建一个对象读取网络中的数据
        BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));

        //4.创建正则表达式
        String regex = "\\d{1,3}";

        //5.创建正则表达式对象
        Pattern  p = Pattern.compile(regex);

        String line;//用于接受读取的一行数据
        while ((line = br.readLine())!=null){
            //6.创建文本适配器
            Matcher m = p.matcher(line);
            while (m.find()){
                //7.获取截取的子串
                System.out.println(m.group());
            }

        }



    }

控制台截取到符合的信息

细节:网络一定要通畅


             

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值