正则表达式

正则表达式-简单版

符号解析

符号 意义 实例 解释
[] - []匹配括号内的符号,- 连字符代表区间 [a-z] 匹配a-z之间的字母
^ ^不匹配的字符 [^a-z] 不匹配a-z之间的字母
. . 匹配\n以外的任意字符,注意:若是单纯要匹配一个. 应该转义 \\. a.c 匹配如abc的字符,长度为3
\\d 匹配单个数字,等于[0-9] \\d 匹配3个数字,如123
\\D 匹配单个非数字,等于[ ^0-9] \\D 匹配3个非数字,如abc
\\w 匹配单个数字及大小写字母,等于[0-9a-zA-Z] \\d\\w 匹配一个数字开头,后接一个数字大小写字母,如1a、11
\\W 等于[ ^0-9a-zA-Z] \\d\\W 匹配一个数字开头,后接一个f非数字大小写字母,如1#
\\s 匹配任何空白字符,如空格制表符
\\S 与上者相反
* 匹配0次以上(包含0次) (abc)*,abc* 前者匹配abc 0次以上,可有可没有;后者匹配一定有ab,c可有可无
+ 匹配1次以上(包含一次) a+(abc)* 匹配至少一个a开头,后接abc 0个以上
匹配0次或1次 a+(abc)* 匹配至少一个a开头,后面 不接 或者 接1个 abc
指定匹配几个字符 [a-z] 匹配任意在a-z中连起来的3个字符,如jww
指定匹配至少n个字符 [\\w] 匹配任意在a-z中连起来的3个以上字符,如jww666
指定匹配至少n个至多m个字符 [\\w] 匹配任意在a-z中连起来的3个以上5个以下字符,如jww66666
^ 规定起始字符 [1]+[0-9] 匹配字符串只能以至少1个a-z的字母开头接一个数字,如as2dddd
$ 规定结束字符 [a-z]+[0-9]$ 匹配的字符串只能以至少1个a-z的字母开头接一个数字结尾,如ddddas2
\\b 匹配边界 jww\\b jwwisjww

分组、贪婪、反向引用

分组

(pattern) 匹配的同时可拿到此组的内容 (\\d\\d)([a-z]+) 匹配到11az时候,11为第一组,az为第二组
(?:pattern) 非捕获匹配,不存储,用来简化or字符 | http(?:😕/|:s//) 对http://|https://的简化
(?=pattern) 非捕获匹配,只匹配满足条件的,但结果不包含pattern java(?=1.8|1.7|1.6) 匹配到满足java1.8或java1.7或java1.6的java字符
(!=pattern) 非捕获匹配,只匹配除条件外的,但结果不包含pattern java(?=1.8|1.7|1.6) 匹配到不满足java1.8或java1.7或java1.6的java字符,如java16

贪婪

贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配

当此字符紧跟在{ * 、 + 、 ? 、 {n,} 、{n,m} }之后,即为非贪婪匹配 a+? 当有字符串aaa时候, a+? 一次只匹配一个a,而a+是匹配全部
		String content = "19192885";
        String rex = "(\\d\\d){1,5}";
        Pattern pattern = Pattern.compile(rex);
        Matcher matcher = pattern.matcher(content);
        while (matcher.find()){
            System.out.println(matcher.group(0));
        }

控制台打印为
    19192885

加了问号后

		String content = "19192885";
        String rex = "(\\d\\d){1,5}?";
        Pattern pattern = Pattern.compile(rex);
        Matcher matcher = pattern.matcher(content);
        while (matcher.find()){
            System.out.println(matcher.group(0));
        }

控制台打印
19
19
28
85
    
{1,5}非贪婪只选择1来匹配,所以每次只匹配一次\\d\\d,即19,下一次匹配后面2个数字19

反向引用

指的是 可以在后面的位置使用先前匹配过的内容

\\1 \\后接分组 (\\w)(\\w)\\1\\2 表示第三个字符要和第一组相等、第四个字符要和第二组相等,如abab
(a)\\1 匹配5个a
 		String content = "188522336556";
        String rex = "(\\d)(\\d)\\2\\1";
        Pattern pattern = Pattern.compile(rex);
        Matcher matcher = pattern.matcher(content);
        while (matcher.find()){
            System.out.println(matcher.group(0));
        }

匹配结果:6556

  1. a-z ↩︎

posted @ 2022-07-28 12:49  lopzzzzzzzzzzzzzz  阅读(48)  评论(0编辑  收藏  举报