Perl語言程式設計 正規表示式

2021-09-10 14:28:25 字數 2237 閱讀 4058

perl語言之所以是一種非常擅長文字處理的語言,我想很多都是由於正規表示式的緣故。perl語言中的正規表示式功能基本是所有常用語言中最強大的,以至於很多語言設計正規表示式支援的時候都參考perl語言的正規表示式。正規表示式描述的是一種匹配模式,換言之就是可以快速判斷目標字串是否與我們提供的模板匹配,或者快速判斷目標字串中是否含有與我們的模板匹配的部分。除了檢查是否匹配之外,正規表示式還支援替換、轉化等操作。概括而言,perl的正規表示式有三種形式:

這三種形式一般都和=~(表示匹配)或者!~(表示不匹配)搭配使用。它們不僅在語法上更為簡潔,還可以像雙引號字串一樣解析,而不是作為普通的操作符。

匹配操作符顧名思義就是用於匹配乙個字串語句的表示式,即m//,也可以直接縮寫成//。需要進行匹配的字串模板寫在兩個斜線中間。例如:

#!/usr/bin/perl

$text = "beforematchafter";#目標字串

if ($text =~ /match/)#檢查目標字串中是否有match這個字串

print "matched";

else

print "no match";

實際上,這對斜線就是一組定界符。言外之意,我們可以用任意別的定界符替換雙斜線,例如m(match)、m等等都是可以的。當然,選擇模式中不會出現的字元作為定界符才是明智的選擇。我們可以預設用斜線作為定界符,當模式中存在斜線的時候,比如說去匹配**的時候,我們再臨時使用一下別的定界符,這樣可以有效避免**出錯。

perl語言中存在好幾個模式匹配修飾符,也成為標誌。它們是追加在模式表示式的定界符後面的字元,用來改變預設的匹配行為。

如果模式表示式後面加上小寫字母i,則匹配過程中程式會完全無視大小寫之間的區別。舉例而言,yes、yes、yes等等在這裡是完全等價的。

預設的情況下,點號「.」無法匹配換行符,這在絕大多數情況下都是很合理的。但是個別時候,如果我們希望點號可以匹配換行符,那麼我們可以在模式表示式後面加上s。它會將模式中的每個點號轉換成按字符集[\d\d]進行處理。

有時候我們的模式表示式寫出來會顯得很凌亂,如果我們可以在其中加入空格進行分割、對齊的話可以使得**更為易讀。但是隨意的新增空格又會導致匹配失敗。在模式表示式的後面加上x就可以解決這個問題。它會使程式在匹配的過程中忽略模式表示式中的空格。

當一次匹配需要用到上述的多個特性的時候,我們可以將對應的標誌全部加到模式表示式的後面,而不用在乎它的順序。

預設的情況下,給定的模式如果不匹配字串的開頭,就會從下乙個字元繼續嘗試,通過給定錨位,我們能夠讓模式僅僅在字串的指定位置匹配。

\a錨位匹配字串的絕對開頭。例如我們想檢查某個**是不是https開頭的就可以使用這個錨位;\z匹配字串的絕對末尾,例如我們想檢查檔名的字尾是不是.jpeg,就可以使用這個錨位。\b是單詞邊界錨位,它匹配任何單詞的首尾。不過,這裡的單詞不是指一般的英文單詞,而是一組\w字元構成的字符集,即可以是英文本母,也可以是數字和下劃線。

替換操作符

替換操作符是匹配操作符的乙個擴充套件,其作用是,如果成功匹配,就將匹配的部分替換為另乙個字串。基本格式如下:

s/pattern/replacement/;
pattern為匹配模式,replacement為替換的字串。

和匹配操作符相同,替換操作符也有一些可以使用的標誌:

替換操作符標誌

修飾符描述i

如果在修飾符中加上「i」,則正規表示式會取消大小寫敏感性。

m預設的正則開始「^」和結束「$」只是對於正則字串。如果在修飾符中加上「m」,那麼開始和結束將會指字串的每一行。

o表示式只執行一次。

s「.」將會代表任意字元。

x表示式中的空白字元將會被忽略,除非它已經被轉義。

g替換所有匹配的字串。

e替換字串作為表示式。

轉化操作符

以下是轉化操作符相關的修飾符

轉化操作符標誌

修飾符描述c

轉化所有未指定字元

d刪除所有指定字元

s把多個相同的輸出字元縮成乙個

舉例而言,我們打算將乙個變數中所有的小寫字母都變成大寫字母:

#! /usr/bin/perl

$string = 'we want to change this sentence.';

$string =~ tr/a-z/a-z/;

print "$string\n";

執行以上程式的輸出結果為:we want to change this sentence.

perl語言程式設計 正規表示式篇

使用正規表示式時,需要使用兩個字串處理運算子 模式匹配運算子m 和替換運算子s 此處還將附帶介紹另乙個密切相關的運算子,即轉換運算子tr 它進行一些簡單的轉換,但不使用正規表示式。while line 說明 用 運算子來指定m 運算子查詢的字串。當使用 做界定符時m可省略,即m exit 和 exi...

Perl 正規表示式

正規表示式文中列表 將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個後向引用 或乙個八進位制轉義符。匹配輸入字串的開始位置。如果設定了 regexp 物件的multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束位置。如果設定了 regexp 物件的multiline 屬性...

Perl正規表示式

元字元 元字元的含義是具有特殊含義的字元,即為元字元,元字元包括 點號能夠匹配所有的單字元,但是換行字元除外 n 簡易量詞 記載匹配正規表示式的時候有些需要重複的字元或者字串,我們在表示這種重複的形式的時候,即是量詞,我們知道的量詞有 表示至少重複一次,表示重複一次或者一次 以上,指的是重複一次或者...