您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“如何在Perl中使用正則表達式”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“如何在Perl中使用正則表達式”這篇文章吧。
⑴匹配模式
我們已知在Perl中正則表達式被稱為模式,這種模式(也即正則表達式)可以放在由成對符號(例如()、<>、{}等)或者一對不成對的符號(例如//、!!、^^等)組成的界定符內,并在界定符前用小寫字母指定模式的種類。當然我們不希望界定符和正則表達式的符號有所沖突(如果實在有沖突可以使用反斜杠轉義),事實上最常用的界定符為雙斜杠//。在Perl中有很多處理模式,其中最簡單的為匹配模式m//,或者也可以理解為查找模式。由于正則表達式本身就有匹配的含義,以雙斜杠作為定界符時m可以省略。其他處理模式詳見下一小節。
$_ = "yabba dabba doo";if (/y(.)(.)\2\1/) { print "It matched!\n";}
運行結果如下所示:
$_ = "yabba dabba doo";if ($_ =~ /y(.)(.)\2\1/) { print "It matched!\n";}
其中=~是表示內容匹配的綁定操作符,其返回值為表示是否成功匹配的布爾值,基于上面的寫法我們可以根據實際需要隨意改變要匹配的變量名稱。
⑵模式修飾符
/abc.*xyz/is #忽略大小寫并使點號匹配任意字符
⑶錨位
$_ = "This is the wilma linebarney is on another linebut this ends in fred";if (/^barney/m) { print "It matched!\n";}
/\Abarney/ #匹配字符串絕對開頭位置的barney/fred\z/ #匹配字符串絕對末尾位置的fred/fred\Z/ #匹配行尾也即換行符前的fred/\A\s*\Z/ #匹配一個空行
/\bfred\b/ #會匹配fred、fred's但是不會匹配afred、fred_s
此外\B則會錨定非單詞邊界,如下所示
/\bfred\B/ #會匹配fred_s 但是不會匹配fred、fred's、afred
⑷變量內插
my $what = <STDIN>;chomp $what;while (<>) { if (/\A($what)/) { print "$_"; }}
⑸捕獲變量
$_ = "Hello there, neighbor";if (/(\S+).*,\s(\w+)/) { print "What I said is:\n$1 $2!\n";}
這些捕獲變量在下一次正則表達式成功匹配之前都是有效的,如果某次匹配失敗,那么捕獲變量里儲存的仍是上一次成功匹配時的數據,這里的匹配成功指的是整個模式的匹配而非捕獲組的匹配,這也是模式匹配以及捕獲變量的使用一般在if和while等布爾值控制結構里面的原因。如果想永遠使用某次捕獲的內容,則可以使用捕獲變量為自定義標量變量賦值。
$_ = "Hello there, neighbor";if (/(?<name1>\S+).*,\s(?<name2>\w+)/) { print "What I said is:\n$+{name1} $+{name2}!\n";}
以上是“如何在Perl中使用正則表達式”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。