正则表达式学习
Posted hanmk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式学习相关的知识,希望对你有一定的参考价值。
继续上篇的内容,学习令人头痛的正则表达式
6.分支条件
上一章最后一个表达式是:(?0d{2}[) -]?d{8}, 它也能匹配到010)12345678或(022-87654321这样的字符.
这里需要“分支条件”来解决;
正则表达式里的分枝条件指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用** | **把不同的规则分隔开.
例子1:
0d{2}-d{8}|0d{3}-d{7}这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)
例子2:
(0d{2})[- ]?d{8}|0d{2}[- ]?d{8}
这个表达式匹配3位区号的电话号码,其中区号可以用小括号括起来,也可以不用;
区号与本地号间可以用连字号或空格间隔,也可以没有间隔。
例子3:
d{5}-d{4}|d{5}这个表达式用于匹配美国的邮政编码。
美国邮编的规则是5位数字,或者用连字号间隔的9位数字。
如果把它改成d{5}|d{5}-d{4}的话,那么就只会匹配5位的邮编(以及9位邮编的前5位)。
原因是匹配分支条件时,将会从左到右地测试每个条件,如果满足了某个分枝的话,就不会去再管其它的条件了。
7.分组
我们已经知道了如何重复单个字符(直接在字符后面加上限定符即可),那么如何重复多个字符呢?
可以用圆括号()来指定子表达式(也叫分组),然后就可以指定这个子表达式的重复次数了。
例子1:
一个简单的IP地址匹配:(d{1,3}.){3}d{1,3}
(1)先分析(d{1,3}.){3}
表示 匹配1到3位的数字,然后数字后加一个.,然后整体重复3次
(2)后面再加上一个d{1,3}表示再匹配一个1到3位的数字
因为上述写法也能匹配到不合法的ip地址,如300.888.555.999等
注意ip地址的每个数字都不能大于255
所以可以这样写:((2[0-4]d|25[0-5]|[01]?dd?).){3}(2[0-4]d|25[0-5]|[01]?dd?)
8.反义
例子:{a[^}]+}匹配用花括号括起来的以a开头的字符串
以上是关于正则表达式学习的主要内容,如果未能解决你的问题,请参考以下文章