码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式学习(二)

时间:2018-06-01 23:19:26      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:tps   解决   本地   分组   地址   邮政编码   其它   规则   png   

继续上篇的内容,学习令人头痛的正则表达式

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开头的字符串

技术分享图片

正则表达式学习(二)

标签:tps   解决   本地   分组   地址   邮政编码   其它   规则   png   

原文地址:https://www.cnblogs.com/hanmk/p/9123456.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!