本文只介紹perl語言正規表示式的零寬斷言功能。
零寬斷言實質:匹配文字裡面的位置。
零寬斷言叫
zero-length assertions
,也叫lookaround(這個更容易理解)。
包括:lookahead(向
前看,零寬度正**先行斷言),
lookbehind
(向後看,零寬度正回顧後發斷言)。
從左到右對文字進行匹配,判斷是否符合exp表示式。
名字表示式
如果子表示式成功則
…positive lookahead
(零寬度正**先行斷言)
(?=subexp)
如果匹配到右邊則成功
negative lookahead
(零寬度負**先行斷言)
(?!subexp)
如果沒有匹配到右邊則成功
注:成功就是找到對應的
位置
如圖所示:首先這個是lookahead(向前看)他匹配
exp這個詞(
oldboy
)之前的乙個位置,同時是
positive lookahead
是表示匹配到
exp就成功的意思。
注:先理解lookahead的含義。然後對比理解positive lookahead和negative lookahead的區別。
lookbehind(向後看),從右向左匹配,判斷是否符合exp表示式。
名字表示式
如果子表示式成功則
…positive lookbehind
(零寬度正回顧後發斷言)
(?<=subexp)
如果匹配到左邊則成功
negative lookbehind
(零寬度負回顧後發斷言)
(?如果沒有匹配到左邊則成功
#注:成功就是找到對應的
位置
如圖所示lookahead匹配的位置是在
subexp
之前,lookbehind
匹配的位置是在
subexp
之後。轉義字元
含義\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.50bcast: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 '(?
192.168.85.50 bca
但是後面的去除需要使用使用零寬度正**先行斷言
[root@node1 oldboy]# ifconfig eth0|grep -op '(?
192.168.85.50
Perl 正規表示式
正規表示式文中列表 將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個後向引用 或乙個八進位制轉義符。匹配輸入字串的開始位置。如果設定了 regexp 物件的multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束位置。如果設定了 regexp 物件的multiline 屬性...
Perl正規表示式
元字元 元字元的含義是具有特殊含義的字元,即為元字元,元字元包括 點號能夠匹配所有的單字元,但是換行字元除外 n 簡易量詞 記載匹配正規表示式的時候有些需要重複的字元或者字串,我們在表示這種重複的形式的時候,即是量詞,我們知道的量詞有 表示至少重複一次,表示重複一次或者一次 以上,指的是重複一次或者...
perl 正規表示式
匹配 m 還可以簡寫為 略去 m 替換 s 轉化 tr 這三種形式一般都和 或 搭配使用 其中 表示相匹配,在整條語句中讀作 does,表示不匹配,在整條語句中讀作 doesn t 並在左側有待處理的標量變數。如果沒有該變數和 操作符,則預設為處理 變數中的內容。舉例如下 str i love pe...