前言
正则这个东西,对于任何程序员掌握了只有好处没有坏处的。刚刚好昨天再写报告的时候,要去网页上复制自己的问卷,结果刚刚好使用正则替换的方式,将整个格式修改好了,那一刻再次体验到编程的好感,总之学习正则的难度不大,够自己用就好了,缺点是如果长时间不用的话,几乎忘记的一干二净。建议就是设计到文字的替换什么的就逼自己使用正则。下面是正则的介绍和知识点。
注:因为正则表达式太长了,下面都是缩写为正则。
正则的作用
在我们上网的过程中,会去经常查找某些符合复杂规则的字符串,如想把中国所有座机号都匹配上了。这种时候正则就派上用场了。
而正则的作用就是:
- 检测字符串是否符合某种规则
- 替换字符串
入门
我们先来一个小热身,当你想去匹配hi这个单词的时候,你可以使用hi
这样的方式去查找,那你有话说了这不就是我们普通的查找方式吗!就是最简单的正则了。而正则通常是忽略大小写的,所以这个正则很可以匹配到hi、HI、Hi、hL这几种情况。
因为上诉的正则还会匹配到单词中出现的hi的字符,比如him、high等。这时我们又有一个需求了,我们不想匹配到这些字符,我们仅仅是想匹配到hi这个字符。那我们应该使用\bhi\b
。\b
是就是一个元字符(metacharacter),说白了就是一个特殊字符,是单词boundary
的缩写(这个只是为了让你好记点),代表着单词的开头或结尾,就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是\b
并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置。
元字符(自学部分)
- 表示位置的
\b
匹配单词的开始或结束^
匹配字符串的开始$
匹配字符串的结尾
- 字符匹配
.
匹配除了换行符以外的任意单个字符\w
匹配字母或数字或下划线或汉字\d
匹配数字(0-9)\s
匹配任意空白符(任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等)
- 限定符(限定重复次数)
*
重复零次或更多次(0+)?
重复零次或一次(0,1)+
重复一次或更多次(1+){num}
重复num次{n,m}
重复n到m次{n,}
重复n次或更多次
- 反义
\W
匹配任意不是字母,数字,下划线,汉字的字符\S
匹配任意不是空白符的字符\D
匹配任意非数字的字符\B
匹配不是单词开头或结束的位置[^x]
匹配除了x以外的任意字符
字符组合
如果你想匹配一些自定义的字符集,你便要使用[]
来划定你想匹配的东西,如:想匹配元音字母a,e,i,o,u,便可以[aeiuo]
这样使用,就是匹配任何一个出现在中括号里面的任意字符。要没有发现这个和我们中学学到的区间很像,其实就是表示一个范围,就像[0-9]
代表的就是\d
的意思。
转义
如果我就想匹配.了,因为在正则中给这个字符定义了特殊的含义,所以你要使用的时候也能简单做一次转移就好了,使用符号\
。如匹配一个点[\.]
其他需要反复琢磨的东西
如果你想要出现两种情况,在逻辑上有一层或的关系,你就可以使用|
符号,但请记住该符号的两次是两个完整的正则。
如果你想在后面引用前面匹配到一样的东西,你需要对前面的东西先要进行一次分组,使用()
这个符号,后面地方使用\num
,这里的num就是第几个分组,当然分组看的小括号是正则表达式从左到右,最左的就是第一个分组。
说到贪婪和懒惰的情况,正则匹配默认就是贪婪匹配,要是得懒惰的匹配在你想要匹配地方尽可能少的出现的地方加一个?
便可。