\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地址的正则表达式。
原文链接:https://www.f2er.com/regex/361010.html