正则表达式
正则表达式-简单版
符号解析
| 符号 | 意义 | 实例 | 解释 | 
|---|---|---|---|
| [] - | []匹配括号内的符号,- 连字符代表区间 | [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
- a-z ↩︎ 

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号