老男孩带你了解perl正则表达式中的零宽断言

栏目: Perl · 发布时间: 8年前

内容简介:老男孩带你了解perl正则表达式中的零宽断言

1.1  前言

本文只介绍 perl 语言正则表达式的零宽断言功能。

零宽断言实质:匹配文本里面的 位置。

零宽断言叫 zero-length assertions ,也叫 lookaround (这个更容易理解)。

包括:lookahead(向 前看,零宽度正预测先行断言), lookbehind (向后看,零宽度正回顾后发断言)。

从左到右对文本进行匹配,判断是否符合exp表达式。

名字

表达式

如果子表达式成功则

positive lookahead

(零宽度正预测先行断言 )

(?=subexp)

如果匹配到右边则成功

negative lookahead

(零宽度负预测先行断言 )

(?!subexp)

如果没有匹配到右边则成功

注: 成功就是找到对应的 位置

1.2  l ookahead 向前看 - 找到匹配内容前面的位置

老男孩带你了解perl正则表达式中的零宽断言

如图所示:首先这个是 lookahead (向前看)他匹配 exp 这个词( oldboy )之前的一个位置,同时是 positive lookahead 是表示匹配到 exp 就成功的意思。

注:先理解lookahead的含义。然后对比理解positive lookahead和negative lookahead的区别。

1.3  lookbehind 向后看,找到匹配内容的后面的位置

lookbehind(向后看),从右向左匹配,判断是否符合 exp 表达式。

名字

表达式

如果子表达式成功则

positive lookbehind

(零宽度正回顾后发断言 )

(?<=subexp)

如果匹配到左边则成功

negative lookbehind

(零宽度负回顾后发断言 )

(?<!subexp)

如果没有匹配到左边则成功

# 注:成功就是找到对应的 位置

老男孩带你了解perl正则表达式中的零宽断言

1.4  lookahead lookbehind 区别

老男孩带你了解perl正则表达式中的零宽断言

如图所示 lookahead 匹配的位置是在 subexp 之前, lookbehind 匹配的位置是在 subexp 之后。

1.5  perl 常用的转义字符

转义字符

含义

\b

单词的边界。

\w

表示 [a-zA-Z0-9 _ ] 中任意一个字符

\W

\w 相反表示不在 [a-zA-Z0-9 _ ] 中的任意字符

\d

[0-9]中的一个数字

\D

不在 [0-9] 中的任意字符

1.6  案例 1 :实战演示:取IP地址

  基本格式,红色就是我们的目标。

[root@node1 oldboy]# ifconfig eth0

eth0      Link encap:Ethernet  HWaddr 00:0C:29:3A:C5:88  

inet addr: 192.168.85.50   Bcast:192.168.85.255  Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fe3a:c588/64 Scope:Link

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:81923 errors:0 dropped:0 overruns:0 frame:0

TX packets:26480 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:96099065 (91.6 MiB)  TX bytes:3459424 (3.2 MiB)

方法一:使用positive lookahead(正常向前看,零宽度正预测先行断言)

[root@node1 oldboy]# ifconfig eth0 | grep -oP "[0-9.]+(?=  Bcast)"

192.168.85.50

[root@node1 oldboy]# ifconfig eth0 | grep -oP "[\d.]+(?=  Bcast)"

192.168.85.50  

说明:

1.这里使用 lookahead 的时候要注意, Bcast 前面有两个空格,匹配时要注意他们。

2. 前面已经说过, \d è [0-9]

方法二:使用 positive lookbehind (正常向后看,零宽度正回顾后发断言)

[root@node1 oldboy]# ifconfig eth0 | grep -oP '(?<=\baddr:)[\d.]+'

192.168.85.50

方法三:使用零宽度负预测先行断言

[root@node1 oldboy]# ifconfig eth0|grep -oP 'addr:[\d\.]+(?![\d\.])'

addr:192.168.85.50

但是去掉 "addr:" 还是需要使用lookbehind(向后看,零宽度正回顾后发断言)

[root@node1 oldboy]# ifconfig eth0|grep -oP '(?<=addr:)[\d\.]+(?![\d\.])'

192.168.85.50

方法四:使用零宽度负向回顾后发断言

[root@node1 oldboy]# ifconfig eth0|grep -oP '(?<![\d\.])[\d\.]+(?)  Bca'

192.168.85.50  Bca

但是后面的去除需要使用使用零宽度正预测先行断言

[root@node1 oldboy]# ifconfig eth0|grep -oP '(?<![\d\.])[\d\.]+(?)(?=  Bca)'

192.168.85.50  

更多精彩关注老男孩 linux培训


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Swift语言实战入门

Swift语言实战入门

伍星、罗飞、刘志华、王浩力、刘蕾 / 人民邮电出版社 / 2014-10-23 / 79

《Swift语言实战入门》以Swift语言的基础知识和实战技巧为主要内容,佐以大量的实例和图片进行讲解。全书内容分为三大部分,共11章节。第一大部分讲述Swift语言的基础知识和语法,第二大部分讲解开发框架和库的相关内容,第三大部分集中讲解以2048游戏为例的实战演练,从入门到实战层层递进。本书注重实战,秉承着学以致用的原则,让读者真正看后能够实际操作。120个代码清单全部共享,配套教学视频在线收......一起来看看 《Swift语言实战入门》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

html转js在线工具
html转js在线工具

html转js在线工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具