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

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

内容简介:老男孩带你了解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-2 / 59.00元

《零成本实现Web性能测试:基于Apache JMeter》是一本关于Web性能测试的实战书籍,读者朋友们在认真阅读完《零成本实现Web性能测试:基于Apache JMeter》后,相信能够将所学知识应用到生产实践中。《零成本实现Web性能测试:基于Apache JMeter》首先介绍基础的性能测试理论,接着详细介绍如何使用JMeter完成各种类型的性能测试。实战章节中作者以测试某大型保险公司电话......一起来看看 《零成本实现Web性能测试》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具