亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么實現Perl正則表達式匹配

發布時間:2021-12-06 10:09:42 來源:億速云 閱讀:123 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“怎么實現Perl正則表達式匹配”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“怎么實現Perl正則表達式匹配”這篇文章吧。

Perl正則表達式詳解

Perl正則表達式有三種形式:匹配、替換和轉換。接下來對每一個表達式給出詳盡解釋。

Perl正則表達式匹配:m/<regexp>/這種形式表明在//內部的正則表達將用于匹配=~或!~左邊的標量。為了語法上的簡化用/<regexp>/,略去m。

Perl正則表達式替換:s/<regexp>/<substituteText>/這種形式表明Perl正則表達式<regexp>將被文本<substituteText>替換,為了語法的簡化用/<regexp>/<substituteText>略去s。

Perl正則表達式轉換:tr/<charClass>/<substituteClass>/這種形式包含一系列的字符&mdash;/<charClass>&mdash;同時把它們替換為<substituteClass>。

注意轉換<tr>并不真正是一個Perl正則表達式,但是對于用Perl正則表達式難于處理的數據常使用它來進行操縱。因此,tr/[0-9]/9876543210.組成1223456789,987654321等字符串。

◆通過使用=~(用英語講:does,與“進行匹配”同)和!~(英語:doesn't,與“不匹配”同)把這些表達式捆綁到標量上。作為這種類型的例子,下面我們給出六個示例Perl正則表達式及相應的定義:

$scalarName=~s/a/b;#substitutethecharacteraforb,andreturntrueifthiscanhappern   $scalarName=~m/a;#doesthescalar$scalarNamehaveanainit?   $scalarName=~tr/A-Z/a-z/;#translateallcapitalletterwithlowercaseones,andreturntureifthishappens   $scalarName!~s/a/b/;#substitutethecharacteraforb,andreturnfalseifthisindeedhappens.   $scalarName!~m/a/;#doesthescalar$scalarNamematchthecharactera?Returnfalseifitdoes.   $scalarName!~tr/0-9/a-j/;#translatethedigitsforthelettersathruj,andreturnfalseifthishappens

.如果我們輸入像hornedtoad=~m/toad/這樣的代碼,則出現圖9-1所示情況:

另外,如果讀者正在對特定變量$_進行匹配(讀者可能在while循環,map或grep中使用),則可以不用!~和=~。因而,以下所有代碼都會合法:

my@elemente=('al','a2','a3','a4','a5');   foreach(@elements){s/a/b/;}

程序使@elements等于b1,b2.b3,b4,b5。另外:

while(<$FD>){printif(m/ERBOR/);}

打印所有包含error字符串的行:

if(grep(/pattern/,@lines)){print"thevariable\@lineshaspatterninit!\n";}

打印所有包含模式pattern內容的行,這直接引入下一原則。


◆Perl正則表達式匹配。

Perl正則表達式盡在標量上匹配,注意這里標量的重要性,如果讀者試一試如下代碼:

@arrayName=('variablel','variable2');   @arrayName=~m/variable/;#looksfor'variable'inthearray?No!usegrepinstead

那么@arrayName匹配不成功!@arrayName被Perl解釋為2,于是這意味著讀者在輸入:

'2'=~m/variable/;

至少講這不能給出預想的結果。如果讀者想這樣做,輸人為:

grep(m/variable/,@arrayName);

該函數通過@arrayName中的每一個元素進行循環,返回(在標量環境中)匹配的次數,同時在數組環境中返回匹配元素的實際列表。

 
◆對于給定的模式串,Perl正則表達式只匹配最早出現的匹配項。匹配時缺省一次只匹配或替換一次。

這個原則使用稱為“回溯”的過程指出如何匹配一個給定的字符串;如果發現了一個局部匹配進而找到使該匹配無效的東西,Perl正則表達式在字符串中“回溯”最小的可能數量,這個數量的字符要保證不丟失任何匹配。

對于理解Perl正則表達式正在做什么,這個原則是最有幫助的一個,同時不需要與Perl一樣的形式來理解它正在做什么。假定有如下模式:'Sillypeopledosillythingsifinsillymoods'

同時想匹配如下模式:'sillymoods'

那么Perl正則表達式引擎匹配silly,接著遇到people的P,至此,Perl正則表達式引擎知道***個silly不匹配,于是Perl正則表達式引擎移到P且繼續尋求匹配。它接著遇到第二個silly,于是來匹配moods。然而得到的是字母t(在thing中),于是移到things中的t處,繼續進行Perl正則表達式匹配。當引擎遇到第三個silly并且盡力匹配moods時,匹配成功,匹配***完成。當我們遇到通配符時回溯將變得更加重要。如果在同一Perl正則表達式中有幾個通配符,且所有的通配符交織在一起,那么這里就有病態情形出現,在這種情形下,回溯變得非常昂貴。看如下表達式:$line=m/expression.*matching.*could.*be.*very.*expensive.*/

◆*代表一個通配符,它意味著“匹配任意字符(換行符除外)零次或多次”。這個過程有可能花很長時間;如果在未匹配過的字符串末尾有可能匹配,那么引擎將發狂地回溯。為得到這方面的更多信息,請留意關于通配符方面的原則。

如果讀者發現類似于上面的情形,那么通配符需將Perl正則表達式分解成小功部分。換句話講,簡化自己的Perl正則表達式。

以上是“怎么實現Perl正則表達式匹配”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德保县| 呼图壁县| 道孚县| 读书| 高尔夫| 蓬溪县| 金华市| 苏尼特左旗| 永济市| 梅州市| 天祝| 金川县| 晋江市| 酒泉市| 满洲里市| 增城市| 乌恰县| 格尔木市| 张家港市| 平利县| 蒲城县| 阿克陶县| 嘉峪关市| 黄陵县| 定安县| 南通市| 仪陇县| 五华县| 黎川县| 东宁县| 莆田市| 呼伦贝尔市| 闽侯县| 苏尼特左旗| 玛多县| 广德县| 彰化市| 进贤县| 蓬溪县| 喀喇| 塘沽区|