从[]开始学习正则表达式

JAVA herman 249浏览
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:codedq,发送下载链接帮助你免费下载!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:codedq,之前的微信号好友位已满,备注:返现
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领

正则表达式非常容易忘记,而且学精通非常的难。平时用的不多,或者用到的都可以在网上找到。但是一般只有发生性能问题时,才会去从头学习它。

就比如,一个”[]”字符组(Character Classes)都能让很多人搞错。今天,我们一起来从零,从[]开始学习和了解一下正则表达式吧。

从零开始学习正则表达式

[]能够匹配所包含的一系列字符中的任意一个。需要注意的是,[]虽然能匹配其中的任意一个字符,但匹配的结果只能是一个字符,不是多个。

例如[abc]表示字符“a”或“b”或“c”。

[]支持用连字符“-”连接两个字符,来表示一个字符范围。需要注意的是,“-”前后的两个字符是有顺序的,即使用相同的编码时,后面的字符码位应大于或等于前面字符的码位。

例如[a-z]表示任意一个小写字母。而在程序中使用[z-a]则会报“[x-y] 范围的顺序颠倒”这样的异常。

大部分在正则中有特殊意义、在匹配其本身时需转义的字符,在[]内是不需要转义的。必须转义的只有“\”、“[”和“]”,而“^”出现在[]开始位置,“-”前后构成范围区间时,需要转义,出现在其它位置不需要转义,例如[\^.$^{[(|)*+?-\]。

在不构成歧义的情况下,“[”和“]”可以不用转义,程序也可以得到预期结果,但是这种写法可读性较差,而且出现错误时不易排查,因此不推荐这种写法。例如下面的写法:

Regex reg = new Regex("[^]]+");  //不推荐

常见错误用法:因为[]本身表示的就是字符之间“或”的关系,因此在[]中使用“|”来表示“或”的关系是错误的。

举例:[a|b|c]表示的是“a”或“b”或“c”或“|”中的任意一个字符。

举例:源字符串:ab|ac;正则表达式:[a|b|c]+;匹配结果:ab|ac。

[^ ] 排除型字符组

    null
  • [^ ]表示匹配任意一个未列举的字符,同样的,匹配的结果也只能是一个字符。例如[^abc]表示除字符“a”、“b”、“c”外的任意一个字符。
  • [^ ]也支持字符分组,例如[^0-9]表示除数字外的任意一个字符。

新手最容易犯的错误就是,用[^abc]或[^(abc)]这样的表达式来匹配不包含“abc”子字符串的字符串。例如下面这些:

源字符串:string yourStr = “bbbccc”;
规则描述:取出yourStr中格式为<…>,但<>中不是abc的内容
预期结果:<aaa>、<ddd>
错误写法:<[^abc]> 正确写法:<(?!abc>)[^>]>

https://www.xttblog.com

还有一点并不常见,\b在字符组外表示单词边界,但是在字符组内[\b]表示退格符。

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号1:xmtxtt(5000人已满),微信号2:xttblog(5000人已满),微信号3:codedq(超3800)。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » 从[]开始学习正则表达式