微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则表达式学习一

\b是正则表达式规定的一个特殊字符(元字符),代表着一个单词的开头前面和结尾后面一个位置,也就是单词的分解处(它既不是代表空白,也不是代表字符,它是匹配一个位置)

例如:

hi 、history 、him 、high

使用hi,上面的四个都会被匹配到,但是如果使用\bhi\b,则只匹配hi

\d匹配数字 0 -9

{n}表示重复的次数为n

如0\d{2}-\d{8} 表示010-12345678 这样的电话号码的字符串

\s匹配任意的空白字符,这其中包括空格,制表符,换行符,中文全角空格等

\w匹配或数字或字母或下划线或中文,也就是匹配数字、字母、下划线、中文,四种类型中的一种

如\ba\w*\b,匹配字母a开头的单词,其中a后面跟着任意数量的(数字、字母、下划线、中文) 如 a123,a_aaf_1,apple等这样的单词。

^匹配字符串的开始

$匹配字符串的结束

如果想查找原字符本身,比如查找.或者*,\等元字符,则应该在表达式中用\.或者\*,\\等方式来完成。

重复次数限定方法

*表示零次或者多次

+表示重复一次或者多次

?表示重复零次或者一次

{n}表示重复n次

{n,}表示重复n次或者更多次

{n.m}表示重复n次到m次

当需要匹配一类规则中没有给定的类型,如元音字符。a,e,I,o,u,诸如此类的需要自己定制的一种类型。可以使用中括号[]来限定。

如元音字符,表示为[aeIoU],就表示为元音字符中的其中一个

如[0-9]与\d意义相同

[0-9a-zA-Z_]在没有中文字符的情况下与\w意义相同

分支条件:

当有多个规则时,如果想让字符串只要能匹配其中的一种时,使用|就可以

(注意:|与编程语言里面的或||逻辑运算符相似,如果匹配了其中的一种规则,则后面的就不会再匹配,所以要注意股则的顺序)

如\(0\d{2}\)[- ]\d{8}|0\d{2}[- ]\d{8},匹配电话号码,区号加括号或者不加,都行。如(010)-12345678或者010-12345678

(这里,因为小括号也是元字符,故使用\(和\)的方式)

但注意:\d{5}|\d{5}-\d{4},该规则中,前面的部分明显是后面的一部分,如果能匹配后面的规则,则一定能匹配前面的,这样,匹配完了前面的,后面就不匹配了。

如:美国邮编有9位和5位的两种,如果是一个9位的邮编12345-6789,该邮编匹配了前面5个字符,后面的部分就不匹配了。

所以要改一下顺序,使用\d{5}-\d{4}|\d{5}的方式,则5位邮编和9位邮编都能正常匹配。

分组:

分组是指对一串字符进行分组,划分为一类。如\d{n},这是对数字进行重复n次,但是需要对一串特定字符重复多次,应该怎么办呢?这时候就使用分组最合适。

如(\d{1,3}\.){3}\d{1,3},这个一看就知道是没有对数字做限制的IP地址的简单表达形式。因为IP地址的前面三个组合后面都要跟一个点,而最后面的三个数字则不用,这时前面三个字符串表达式相同,就可以使用{3}重复的方式。

这样,前面的(\d{1,3}\.)就是一个分组。

(如上面所说小括号也是元字符,这里就用到了)

如果要对IP地址数字大小做限制,排除不符合的比如256.256.256.256这样的错误IP,则应该对数字大小做限制,这样表达式就会相对比较复杂。

正确的IP地址应该表示为:

((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)

看着挺复杂,仔细分析一下,用到的都是上面刚学的。

分析(2[0-4]\d|25[0-5]|[01]?\d\d?)这一串内容。首先如上所说,它是一个分组,其次它中间用到了|分支,最后是[]的多次使用,

拆分开来看就是2[0-4]\d 就是IP地址数字第一位是2,第二位大于等于0,小于5的数字,第三位任意的1到9的数字。如。209,218,227,236,245等这样的数字

25[0-5] 表示前两位为25的,最后一位大于等于0小于等于5的

如255,254等

[01]?\d\d? 这一串表示0 – 199之间的所有数字

所以(2[0-4]\d|25[0-5]|[01]?\d\d?)这一串整体上其实就是表示0到255之间的所有数字,也许你会问干嘛不用小于或者大于的条件判断就好了嘛,很荣幸的告诉你,正则表达式没有条件判断

(注:IP地址数字值为0-255之间的数字,范围也就是

0.0.0.0- 255.255.255.255)

如果想的话,还可以用正则表达式表示排除A,B,C三类专用IP地址或者A,B,C三类专用IP地址的正则表达式。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐