当前位置: 首页 > 后端技术 > Java

Java正则表达式保姆级教程,从初学者到高手

时间:2023-04-01 22:51:47 Java

目前的项目需要用到正则表达式,再总结一下正则表达式。正则表达式看似简单,其实方法很多,原因就是太灵活了。要完全掌握它仍然需要一些工作。1.正则表达式的原始字符读者需要对正则表达式的元字符有一个初步的印象,实际应用时可以参考文档。正则表达式可以分为六类:限定符、选择匹配器、分组组合和反向引用、字符匹配器、定位器、特殊字符1、限定符、转义符描述\转义符^匹配输入字符串的起始位置$匹配结束位置输入字符串的*匹配前一个子表达式零次或多次,相当于{0,}+匹配前一个子表达式一次或多次,相当于{1,}?零次或一次匹配前面的子表达式,相当于{0,1}{n}匹配确定n次{n,}至少匹配n次{n,m}至少匹配n次,最多匹配m次{?}当字符后面紧跟任何其他限制符(*,+,?,{n},{n,},{n,m})时,匹配模式为非贪婪{n,}至少匹配n次{\b}匹配一个词边界{\B}匹配一个非词边界2、字符匹配字符描述[xyz]匹配包含的任意一个字符1匹配任何不包含的字符[a-z]匹配指定范围Any2内的字符匹配任意不在指定范围内的字符3、捕获分组、非捕获分组字符描述(pattern)匹配pattern并得到本次匹配(?:pattern)匹配pattern但没有得到匹配结果,即这是一个非获取匹配(?=pattern)开头的任何字符串,匹配pattern来匹配搜索字符串4、特殊字符字符描述。匹配除\n之外的任何单词字符,以匹配包括"\n"在内的任何字符,使用类似"(.\n)"\d的模式来匹配数字字符。相当于[0-9]\D匹配一个数字字符。等价于[0-9]\r匹配换行符\s匹配任何空白字符\S匹配任何非空白字符\w匹配任何单词字符,包括下划线\W匹配任何非单词字符\t匹配制表符\W匹配任意非单词字符5,选择匹配字符x|y匹配x或y6,用正则表达式表示email/^#?([a-f0-9]{6}[a-f0-9]{3})$/URL/^(https?://)?([\da-z.-]+).([a-z.]{2,6})([/\w.-])/?$/二、表达式在java中的应用正则表达式在java中的应用主要有两类。下面列出一些常用的方法。需要注意的是,这些都是静态方法。1.Patternclasscompile(Stringregex)将给定的正则表达式编译成Matcher。matches(Stringregex,CharSequenceinput)直接匹配当前字符串#####2.Matcher类find(intstart)查找是否有匹配组(intgroup)获取匹配组matches()匹配当前字符串start()matchesStartpositionend(intgroup)matchendpositionreplaceAll(Stringreplacement)matchreplacement3.例1.java正则表达式的简单应用需求:提取{abc}中的内容@Testpublicvoidtest11(){Stringstr="知情同意书签署日期{zqdate}";字符串reg="\\{+[a-z]?+\\}";///<0=Table0—EnrollmentCriteria>/--[0,2]//将规则封装到对象中。模式p=Pattern.compile(reg);//将正则对象与要作用的字符串相关联。获取匹配器对象。匹配器m=p.matcher(str);while(m.find()){System.out.println(m.group());}}结果1,然后整个艰难的人生都有这样一串字符串,仔细观察这个字符串就是我要的a--a-a--part形式的,然后我就这样写了。发现只提取了一部分。仔细分析发现java默认采用的是贪心模式。而这个字符串是a--a--a的形式,它把我的第一个a和最后一个a当做一个匹配的整体。解决这个问题也很简单,加一个?标记这是非贪心模式,结果正常,分两部分返回。![此处插入图片描述](https://img-blog.csdnimg.cn/ea62078af9bf4c029da4fc07adab5de0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56iL5bqP5ZGY55Sw5biI5YWE0,lort6FF_1相信读者可以从这两个例子中理解正则表达式并有一个初步的掌握,能否成为正则表达式高手就靠你了。要掌握正则表达式,一定要多写。写多了才能背熟,不会多查阅文档。要学习知识,你必须知道它是什么,为什么会这样。以前,如果出了问题,我只会在百度上搜索,然后在结果中一一尝试。现在出了问题,一步步debug源码,找到问题的根源。希望读者能逐渐改变自己的学习方法。即使不了解源码的每一步,也可以对整个过程有一个初步的了解,这对以后学习源码有很大的帮助。有问题评论区见。xyz?a-z?