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

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

内容简介:老男孩带你了解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培训


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

查看所有标签

猜你喜欢:

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

Web渗透技术及实战案例解析

Web渗透技术及实战案例解析

陈小兵 / 范渊、孙立伟 / 电子工业出版社 / 2012-4 / 89.00元

《Web渗透技术及实战案例解析》从Web渗透的专业角度,结合网络安全中的实际案例,图文并茂地再现Web渗透的精彩过程。《Web渗透技术及实战案例解析》共分7章,由浅入深地介绍和分析了目前网络流行的Web渗透攻击方法和手段,并结合作者多年的网络安全实践经验给出了相对应的安全防范措施,对一些经典案例还给出了经验总结和技巧,通过阅读《Web渗透技术及实战案例解析》可以快速掌握目前Web渗透的主流技术。《......一起来看看 《Web渗透技术及实战案例解析》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

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

html转js在线工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具