perl正则表达式中的零宽断言
本文出自 “老男孩linux培训” 博客,请务必保留此出处http://oldboy.blog.51cto.com/2561410/19310191.1?前言本文只介绍perl语言正则表达式的零宽断言功能。 零宽断言实质:匹配文本里面的位置。 零宽断言叫zero-length assertions,也叫lookaround(这个更容易理解)。 包括:lookahead(向前看,零宽度正预测先行断言),lookbehind(向后看,零宽度正回顾后发断言)。 从左到右对文本进行匹配,判断是否符合exp表达式。
注:成功就是找到对应的位置 1.2?lookahead?向前看-找到匹配内容前面的位置如图所示:首先这个是lookahead(向前看)他匹配exp这个词(oldboy)之前的一个位置,同时是?positive lookahead是表示匹配到exp就成功的意思。 注:先理解lookahead的含义。然后对比理解positive lookahead和negative lookahead的区别。 ? 1.3?lookbehind?向后看,找到匹配内容的后面的位置lookbehind(向后看),从右向左匹配,判断是否符合exp表达式。
#注:成功就是找到对应的位置 ? 1.4?lookahead?与lookbehind区别如图所示lookahead匹配的位置是在subexp之前,lookbehind匹配的位置是在subexp之后。 1.5?perl常用的转义字符
?1.6?案例1:实战演示:取IP地址 ??基本格式,红色就是我们的目标。
? ? ? ?方法一:使用positive lookahead(正常向前看,零宽度正预测先行断言)
? ? ? 说明: ? ? ? ?1.这里使用lookahead的时候要注意,Bcast前面有两个空格,匹配时要注意他们。 ? ? ? ?2.前面已经说过,d?è[0-9] ? ? ? ?方法二:使用positive lookbehind(正常向后看,零宽度正回顾后发断言)
? ? ?方法三:使用零宽度负预测先行断言
? 但是去掉"addr:"还是需要使用lookbehind(向后看,零宽度正回顾后发断言)
? ?但是后面的去除需要使用使用零宽度正预测先行断言 [root@node1 oldboy]# ifconfig eth0|grep -oP '(?<![d.])[d.]+(?)(?= ?Bca)' 本文出自 “老男孩linux培训” 博客,请务必保留此出处http://oldboy.blog.51cto.com/2561410/1931019 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |