正则表达式入门(二)分支条件、分组
发表于2019-11-02,长度698,
37个单词,
1分钟读完
回顾前文的问题:匹配几种格式的电话号码,像(010)88886666,或022-22334455,或02912345678等,该怎么写?可以使用前面我们分析的(?0\d{2}[)-]?\d{8}吗?
实际不可以:(?0\d{2}[)-]?\d{8}会匹配到一些不合法的电话号码,比如010)12345678或(022-87654321。
也就是我们要求前面有括号才能后面有括号,那怎么办?通过元字符好像解决不了这个问题,我们可以使用“分支条件”:用竖线(在主键区最右边,回车键上面)把不同的规则分隔开。
比如
0\d{2}-\d{8}|0\d{3}-\d{7}
匹配两种以连字号分隔的电话号码,
\(0\d{2}\)[- ]?\d{8}|0\d{2}[- ]?\d{8}
匹配3位区号的电话号码。
接下来思考这个问题:如何匹配匹配IP4地址,比如192.168.110.001?
IP地址就是四组三位数(也可能是一位或两位),中间用点连接。我们可以写成\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}。
但是如果有一种字符串是一万组(又来…),我们想使用次数范围怎么办?这时候可以使用前面提到的分组:把需要重复出现的用小括号包围起来。 比如上面的正则可以改成(\d{1,3}.){3}\d{1,3}。
实际上,上面的正则式并非IPv4的正确表达,因为这个式子可以匹配诸如999.888.777.666这样的字符串
复杂但合法的IP正则是
((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
既使用了分支也使用了分组。看能看懂吗。
Written on November 2, 2019
分类:
dev,
标签:
re
如果你喜欢,请赞赏!
