文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Linux Shell 正则表达式

2024-12-02 10:38

关注

常用正则表达式

常用字符

普通字符

普通字符主要讲解以下内容,并举例说明

 

  1. //        String regStr = "[a-z]";//匹配a-z中任意一个字符  
  2. //        String regStr = "[A-Z]";//匹配A-Z中任何一个字符  
  3. //        String regStr = "abc";//匹配字符串abc  
  4. //        String regStr = "(?i)abc";//匹配字母abc不区分大小写  
  5. //        String regStr = "[0-9]";//匹配0-9任何一个字符  
  6. //        String regStr = "[^0-9]";//匹配不是0-9中的任何一个字符  
  7. //        String regStr = "[^0-9]{2}";//匹配2个不是0-9的字符  
  8. //        String regStr = "\\d";//匹配任何一个数字字符,等价于[0-9]  
  9. //        String regStr = "\\D";//匹配任何一个非数字字符,等价于[^0-9]  
  10. //        String regStr = "\\w";//匹配任何一个数字、字母、下划线,等价于[0-9a-zA-Z_]  
  11. //        String regStr = "\\W";//匹配任何一个除了数字、字母、下划线,等价于[^0-9a-zA-Z_]  
  12. //        String regStr = "\\s";//匹配任何一个空字符  
  13. //        String regStr = "\\S";//匹配任何一个非空字符  
  14. //        String regStr = "ab|cd";//选择匹配符,匹配字符串ab或者cd 

1) String regStr = "[a-z]";//匹配a-z中任意一个字符 

  1. @Test  
  2. public void test1() {  
  3.        String str = "abc2021" 
  4.        String regStr = "[a-z]" 
  5.        Pattern compile = Pattern.compile(regStr);  
  6.        Matcher matcher = compile.matcher(str);  
  7.        while(matcher.find()){  
  8.            System.out.println("匹配到的数据为:"+matcher.group(0));  
  9.        }  
  10.  } 

结果展示

2) String regStr = "[A-Z]";//匹配A-Z中任何一个字符 

  1. @Test  
  2. public void test2(){  
  3.     String str = "ABCabc2021" 
  4.     String regStr = "[A-Z]" 
  5.     Pattern compile = Pattern.compile(regStr);  
  6.     Matcher matcher = compile.matcher(str);  
  7.     while(matcher.find()){  
  8.         System.out.println("匹配到的数据为:"+matcher.group(0));  
  9.     }  

结果展示

3)String regStr = "abc";//匹配字符串abc 

  1. @Test  
  2. public void test2(){  
  3.     String str = "ABCabc2021" 
  4.     String regStr = "abc" 
  5.     Pattern compile = Pattern.compile(regStr);  
  6.     Matcher matcher = compile.matcher(str);  
  7.     while(matcher.find()){  
  8.         System.out.println("匹配到的数据为:"+matcher.group(0));  
  9.     }  

结果展示

4)String regStr = "(?i)abc";//匹配字母abc不区分大小写 

  1. @Test  
  2. public void test2(){  
  3.     String str = "ABCabc2021" 
  4.     String regStr = "(?i)abc"
  5.     Pattern compile = Pattern.compile(regStr);  
  6.     Matcher matcher = compile.matcher(str);  
  7.     while(matcher.find()){  
  8.         System.out.println("匹配到的数据为:"+matcher.group(0));  
  9.     }  

结果展示

5) String regStr = "[0-9]";//匹配0-9任何一个字符 

  1. @Test  
  2. public void test2(){  
  3.     String str = "ABCabc2021" 
  4.     String regStr = "[0-9]" 
  5.     Pattern compile = Pattern.compile(regStr);  
  6.     Matcher matcher = compile.matcher(str);  
  7.     while(matcher.find()){  
  8.         System.out.println("匹配到的数据为:"+matcher.group(0));  
  9.     }  

结果展示

6) String regStr = "[^0-9]";//匹配不是0-9中的任何一个字符 

  1. @Test  
  2. public void test2(){  
  3.     String str = "ABCabc2021" 
  4.     String regStr = "[^0-9]" 
  5.     Pattern compile = Pattern.compile(regStr);  
  6.     Matcher matcher = compile.matcher(str);  
  7.     while(matcher.find()){  
  8.         System.out.println("匹配到的数据为:"+matcher.group(0));  
  9.     }  

结果展示

限定符 

  1.  

1) *:表示出现任意次数,0次或者n次 

  1. @Test  
  2. public void test2(){  
  3.     String str = "zypabcabc2021" 
  4.     String regStr = "zyp(abc)*" 
  5.     Pattern compile = Pattern.compile(regStr); 
  6.     Matcher matcher = compile.matcher(str);  
  7.     while(matcher.find()){  
  8.         System.out.println("匹配到的数据为:"+matcher.group(0));  
  9.     }  

结果展示

2)+:表示出现至少1次或者n次,如(abc)+表示abc出现1次或者多次 

  1. @Test  
  2. public void test2(){  
  3.     String str = "zypabc2021" 
  4.     String regStr = "zyp(abc)+" 
  5.     Pattern compile = Pattern.compile(regStr);  
  6.     Matcher matcher = compile.matcher(str);  
  7.     while(matcher.find()){  
  8.         System.out.println("匹配到的数据为:"+matcher.group(0));  
  9.     }  

结果展示

3)?:表示出现至少0次或者1次,如abc?表示c出现0次或者1次 

  1. @Test  
  2. public void test2(){  
  3.     String str = "zyp2021" 
  4.     String regStr = "zyp(abc)?" 
  5.     Pattern compile = Pattern.compile(regStr);  
  6.     Matcher matcher = compile.matcher(str);  
  7.     while(matcher.find()){  
  8.         System.out.println("匹配到的数据为:"+matcher.group(0));  
  9.     }  

结果展示

4){n}:表示出现n次,如[0-9]{2},表示匹配2次数字 

  1. @Test  
  2. public void test2(){  
  3.     String str = "zyp2021" 
  4.     String regStr = "[0-9]{2}" 
  5.     Pattern compile = Pattern.compile(regStr);  
  6.     Matcher matcher = compile.matcher(str);  
  7.     while(matcher.find()){  
  8.         System.out.println("匹配到的数据为:"+matcher.group(0));  
  9.     }  

结果展示

5){n,}表示至少出现n次,如[0-9]{3,}表示匹配至少3次数字 

  1. @Test  
  2. public void test2(){  
  3.     String str = "zyp2021" 
  4.     String regStr = "[0-9]{2,}" 
  5.     Pattern compile = Pattern.compile(regStr);  
  6.     Matcher matcher = compile.matcher(str);  
  7.     while(matcher.find()){  
  8.         System.out.println("匹配到的数据为:"+matcher.group(0));
  9.     }  

结果展示

6){n,m}表示出现至少n次,最多m次,如[0-9]{2,4}表示匹配次数2-4次数字 

  1. @Test  
  2. public void test2(){  
  3.     String str = "zyp2021" 
  4.     String regStr = "[0-9]{2,4}" 
  5.     Pattern compile = Pattern.compile(regStr); 
  6.     Matcher matcher = compile.matcher(str);  
  7.     while(matcher.find()){  
  8.         System.out.println("匹配到的数据为:"+matcher.group(0));  
  9.     }  

结果展示

定位符 

  1.  

1) ^:表示字符串以什么开头的意思 

  1. @Test  
  2. public void test2(){  
  3.     String str = "2021zyp" 
  4.     String regStr = "^[0-9]+" 
  5.     Pattern compile = Pattern.compile(regStr);  
  6.     Matcher matcher = compile.matcher(str);  
  7.     while(matcher.find()){  
  8.         System.out.println("匹配到的数据为:"+matcher.group(0));  
  9.     }  

结果展示

2) $:表示字符串以什么结束的意思 

  1. @Test  
  2. public void test2(){  
  3.     String str = "2021zyp"; 
  4.     String regStr = "[0-9]$" 
  5.     Pattern compile = Pattern.compile(regStr);  
  6.     Matcher matcher = compile.matcher(str);  
  7.     while(matcher.find()){ 
  8.         System.out.println("匹配到的数据为:"+matcher.group(0));  
  9.     }  

没有匹配到,因为要以数字结束

3) \\b:表示边缘匹配(字符串的结尾或者空格之后) 

  1. @Test  
  2. public void test2(){  
  3.     String str = "zyp2021zyp" 
  4.     String regStr = "zyp\\b" 
  5.     Pattern compile = Pattern.compile(regStr);  
  6.     Matcher matcher = compile.matcher(str);  
  7.     while(matcher.find()){  
  8.         System.out.println("匹配到的数据为:"+matcher.group(0)); 
  9.     }  

匹配到的是最后一个“zyp”

4) \\B:与\\b相反 

  1. @Test  
  2. public void test2(){  
  3.     String str = "zyp2021zyp" 
  4.     String regStr = "zyp\\B" 
  5.     Pattern compile = Pattern.compile(regStr);  
  6.     Matcher matcher = compile.matcher(str);  
  7.     while(matcher.find()){  
  8.         System.out.println("匹配到的数据为:"+matcher.group(0)); 
  9.    }  

匹配到的是第一个“zyp”

分组 

  1.  

捕获分组

1)如(\\d\\d)(\\d\\d)表示匹配4位数字,如果字符串为2021abcd, 

  1. @Test  
  2. public void test2(){  
  3.     String str = "2021abcd" 
  4.     String regStr = "(\\d\\d)(\\d\\d)" 
  5.     Pattern compile = Pattern.compile(regStr);  
  6.     Matcher matcher = compile.matcher(str);  
  7.     while(matcher.find()){  
  8.         System.out.println("matcher.group(0):"+matcher.group(0));  
  9.         System.out.println("分组一:matcher.group(1):"+matcher.group(1));  
  10.         System.out.println("分组二:matcher.group(2):"+matcher.group(2));  
  11.     }  

结果展示

结论:由此可见()会将正则分组,并按顺序给出编号,从1开始

2) (?\\d\\d)(?\\d\\d)表示匹配4位数字,如果字符串位2021abcd 

  1. @Test  
  2. public void test2(){  
  3.     String str = "2021abcd" 
  4.     String regStr = "(?\\d\\d)(?\\d\\d)" 
  5.     Pattern compile = Pattern.compile(regStr);  
  6.     Matcher matcher = compile.matcher(str);  
  7.     while(matcher.find()){  
  8.         System.out.println("matcher.group(0):"+matcher.group(0));  
  9.         System.out.println("分组一:matcher.group(1):"+matcher.group(1));  
  10.         System.out.println("分组二:matcher.group(2):"+matcher.group(2));  
  11.         System.out.println("分组名a1:matcher.group(1):"+matcher.group("a1"));  
  12.         System.out.println("分组名a2:matcher.group(2):"+matcher.group("a2"));  
  13.     }  

结果展示

结论:由此可见()除了能将正则分组,还能按顺序给出编号,从1开始。还可以给分组取名字,并根据名字获取对应匹配的值

非捕获分组

1)如20(?:20|21|22)表示匹配2020|2021|2022 

  1. @Test  
  2. public void test2(){  
  3.     String str = "2021a2022B2023" 
  4.     String regStr = "20(?:20|21|22)" 
  5.     Pattern compile = Pattern.compile(regStr);  
  6.     Matcher matcher = compile.matcher(str);  
  7.     while(matcher.find()){  
  8.         System.out.println("匹配到的数据为:"+matcher.group(0));  
  9.     }  

结果展示

2)如20(?=20|21|22)表示匹配2020或2021或2022中的20 

  1. @Test  
  2. public void test2(){  
  3.     String str = "2021a2022B2023" 
  4.     String regStr = "20(?=20|21|22)" 
  5.     Pattern compile = Pattern.compile(regStr);  
  6.     Matcher matcher = compile.matcher(str);  
  7.     while(matcher.find()){  
  8.         System.out.println("匹配到的数据为:"+matcher.group(0));  
  9.     }  

这里匹配到的20,为2021和2022中的20

3)如20(?!20|21|22)表示匹配不匹配2020或2021或2022中的20,匹配其它20 

  1. @Test  
  2. public void test2(){  
  3.     String str = "2021a2022B2023" 
  4.     String regStr = "20(?!20|21|22)" 
  5.     Pattern compile = Pattern.compile(regStr);  
  6.     Matcher matcher = compile.matcher(str);  
  7.     while(matcher.find()){  
  8.         System.out.println("匹配到的数据为:"+matcher.group(0));  
  9.     } 

这里匹配到的20为2023中的20

反向引用 

  1.  

字符串12345678870008,正则为(\\d)(\\d)\\2\\1 

  1. @Test  
  2.     public void test2(){  
  3.         String str = "12345678870008" 
  4.           
  5.         String regStr = "(\\d)(\\d)\\2\\1" 
  6.         Pattern compile = Pattern.compile(regStr);  
  7.         Matcher matcher = compile.matcher(str);  
  8.         while(matcher.find()){  
  9.             System.out.println("匹配到的数据为:"+matcher.group(0)); 
  10.        }  
  11.     } 

结果展示 

 

来源:良许Linux内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯