继续上篇的内容,学习令人头痛的正则表达式
6.分支条件
上一章最后一个表达式是:(?0\d{2}[) -]?\d{8}, 它也能匹配到010)12345678或(022-87654321这样的字符.
这里需要“分支条件”来解决;
正则表达式里的分枝条件指的是有几种规则,如果满足其中任意一种规则都应该当成匹配,具体方法是用** | **把不同的规则分隔开.
例子1:
0\d{2}-\d{8}|0\d{3}-\d{7}这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8位本地号(如010-12345678),一种是4位区号,7位本地号(0376-2233445)
例子2:
(0\d{2})[- ]?\d{8}|0\d{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]?\d\d?).){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
8.反义
例子:{\a[^}]+}匹配用花括号括起来的以a开头的字符串
原文地址:https://www.cnblogs.com/hanmk/p/9123456.html
时间: 2024-10-31 02:39:21