加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式学习(一)

发布时间:2020-12-14 01:30:21 所属栏目:百科 来源:网络整理
导读:b 是正则表达式规定的一个特殊字符(元字符),代表着一个单词的开头前面和结尾后面一个位置,也就是单词的分解处(它既不是代表空白,也不是代表字符,它是匹配一个位置) 例如: hi 、history 、him 、high 使用hi,上面的四个都会被匹配到,但是如果使用

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

例如:

hi 、history 、him 、high

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

d匹配数字 0 -9

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

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

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

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

如baw*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意义相同

分支条件:

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

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

如(0d{2})[- ]d{8}|0d{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]?dd?).){3}(2[0-4]d|25[0-5]|[01]?dd?)

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

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

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

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

如255,254等

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

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

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

0.0.0.0- 255.255.255.255)

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读