正则表达式学习

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

技术分享图片

以上是关于正则表达式学习的主要内容,如果未能解决你的问题,请参考以下文章

python学习正则表达式入门

正则表达式的学习

python学习正则表达式进阶

一起学习正则表达式正则匹配原理

一起学习正则表达式正则匹配原理

一起学习正则表达式正则匹配原理