成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

學習筆記 如何實現Perl正則表達式匹配

開發 架構
Perl正則表達式有三種形式,分別是匹配、替換和轉換。這里向大家簡單介紹一下其中之一Perl正則表達式匹配的用法,希望本文介紹對你有所幫助。

本文和大家重點討論一下Perl正則表達式匹配的用法,在學習Perl語言的過程中Perl正則表達式有很多值得學習的地方,這里和大家分享一下Perl正則表達式匹配方面的知識。

Perl正則表達式詳解

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

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

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

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

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

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

  1. $scalarName=~s/a/b;#substitutethecharacteraforb,andreturntrueifthiscanhappern  
  2.  
  3. $scalarName=~m/a;#doesthescalar$scalarNamehaveanainit?  
  4.  
  5. $scalarName=~tr/A-Z/a-z/;#translateallcapitalletterwithlowercaseones,andreturntureifthishappens  
  6.  
  7. $scalarName!~s/a/b/;#substitutethecharacteraforb,andreturnfalseifthisindeedhappens.  
  8.  
  9. $scalarName!~m/a/;#doesthescalar$scalarNamematchthecharactera?Returnfalseifitdoes.  
  10.  
  11. $scalarName!~tr/0-9/a-j/;#translatethedigitsforthelettersathruj,andreturnfalseifthishappens  

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

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

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

 

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

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

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

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

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


◆Perl正則表達式匹配。

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

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

 那么@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正則表達式。

【編輯推薦】

  1. 實例解說Perl 字符匹配用法
  2. Perl模式匹配經驗總結
  3. Perl引用中直接引用用法解析
  4. Perl模式匹配選項詳解
  5. 技術分享 解析Perl模塊創建和導入方法
責任編輯:佚名 來源: csdn.net
相關推薦

2010-07-13 16:56:30

Perl正則表達式

2010-07-13 17:03:53

Perl正則表達式

2010-07-14 09:01:18

Perl正則表達式

2010-07-19 10:40:16

Perl正則表達式

2010-07-14 09:37:46

Perl正則表達式

2009-08-11 13:00:41

C#正則表達式

2009-08-13 15:24:27

C#正則表達式

2010-07-14 09:47:04

Perl正則表達式

2010-07-22 09:12:05

Perl正則表達式

2009-09-16 12:41:42

Perl正則表達式

2009-09-16 16:22:04

正則表達式匹配

2009-09-16 13:24:30

PHP正則表達式匹配

2010-03-15 16:21:28

Python正則表達式

2016-11-10 16:21:22

Java 正則表達式

2015-04-16 11:16:05

PHPPOSIX正則表達式

2010-07-14 10:06:55

Perl正則表達式

2009-09-16 13:53:17

PHP正則表達式匹配

2009-09-16 17:02:15

正則表達式匹配字符串

2009-09-16 17:38:49

正則表達式匹配任意字符

2009-09-16 18:08:14

正則表達式匹配單詞
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91视频观看| 国产精品福利在线观看 | av中文字幕网 | 一区二区三区四区在线 | 亚洲视频1区 | 日韩精品在线看 | 欧美日高清视频 | 久久久久久久久久一区 | 国产精品久久久久久亚洲调教 | 久久久久久看片 | 亚洲精品视频在线 | 最新av中文字幕 | 日韩午夜在线播放 | 亚洲高清av | 国产农村一级国产农村 | 欧美日韩综合精品 | 视频1区2区 | 在线免费观看黄色 | 俺去俺来也www色官网cms | 精品人伦一区二区三区蜜桃网站 | 亚洲视频区 | 日韩精品在线视频免费观看 | 国产在线小视频 | 久久这里只有精品首页 | 小草久久久久久久久爱六 | 国产精品网址 | 国产精品www | 理论片免费在线观看 | 在线看片国产 | 一级毛片视频在线 | 一区日韩 | 国产黄色av电影 | 久久99精品久久久水蜜桃 | 欧美一区二区三区四区五区无卡码 | 国产成人精品一区二区三区网站观看 | 伊人网站在线观看 | 我爱操| 成人精品一区二区三区中文字幕 | 国产日韩精品一区二区三区 | 精品一二三区在线观看 | 97视频久久 |