Perl學習筆記 No.8

來源:互聯網
上載者:User

Regex的應用

1.   //只是m//的簡寫,/http://///不易閱讀,可以寫成 m{http://}或者m%http://%

2.   正斜線不是元字元,如果它不是分隔字元,則不需在前面使用反斜線

 

3.   /fred/i,表示無視大小寫,可以匹配fred,FRED,Fred,fRed等

4.   .不能匹配分行符號,但是加上s後,即能匹配所有字元,比如/f.*/s,匹配所有以f開頭的字串

5.   x允許模式中使用空格或者Tab來方便閱讀理解,也就是說,將忽略模式中的空格和定位字元,比如/ -? /d+ /.? /d* /x

6.   以上3個可選修飾符可以同時使用,並且不限制順序,six,xis,isx,xsi,ixs,sxi

7.   還有其他修飾符...=.=

8.    /^fred/,表示在字串開頭匹配,/fred$/表示在結尾匹配...字串前4個字元,和字串的後4個字元

9.    /^/s*$/ 常見用法,可以匹配空行,如果不用錨定符,則能匹配任意行

10.  詞界錨定,/b,是針對單詞使用的.如//bfred/b/可以匹配上單詞 fred,但不能匹配 frederick,alfred,man fred mann.類似於"全字匹配"

11.  /b,可以只用一個,嗯,效果大家應該都明白的

12.  /B,表示非詞界錨定,//bfred/B/,將不能匹配fred

13.  =~,含義是這個模式預設將對$_進行匹配,但此時將對左邊的字串進行匹配
14.  模式可以使用參數插入,甚至使用@AGRV來獲得

15.  $_ = “ Hello there, neighbor ”;<br /> if(/(/S+) (/S+), (/S+)/){<br /> print “words were $1 $2 $3” ;<br />}<br />#將輸出 words were Hello there neighbor<br />#一個括弧對應一個$x

16.   這些匹配變數的值(儲存在記憶體中)會保持不變,直到下一個模式成功匹配為止

17.   也就是說,一個沒有匹配成功的模式將不會改變記憶體中相應的值,但一個匹配上的模式將重寫此記憶體 .這明確的告訴你 ,不要隨意的使用這些變數 ,除非明確知道它們匹配正確;否則,你可能得到上個模式比對的結果.玩記憶體是不好的...

18.   所以模式比對對用於條件判斷或while中,匹配之後,儘快使用

19.  $&,$'與$`...perl是符號語言...=.=

20.  那些匹配上的字串將自動儲存在$&中

21.  $&為整個匹配部分(模式中有啥,他有啥),不同於$x,$x僅僅只是模式中相對應的()塊的值

22.  $`是$&沒有的前面的部分,$'是$&沒有的後面的部分

 

23.  如果你使用了這三個自動匹配變數中的任意一個,無論在程式的什麼地方,其它地方的Regex的運行數度會變慢一些

24.  所以盡量不用...

25.  其他數量詞表示,/a{5,15}/,表示匹配5到15個a...實際上只要5個以上就能匹配,但是如果輸出最多隻能15個. 如果 a 出現了 3 次 ,則次數太少,而不能匹配上;如果出現 5 次 ,則匹配上了 ;如果出現 10 次,仍然匹配上.如果出現 20 次,仍將匹配上,前 15 個將匹配上.

26.  優先順序:

 (1). 在此優先順序表的最頂端是括弧 ),在分組和引用記憶體值的時候使用.括弧內部的任何部分比括弧外的部分結合更緊密;
 (2). 第二級是數量詞.這裡有星號 (*), 加號(+), 問號(?),以及由花括弧表示的數量詞,如{5,15} , {3, } , {5}等 .它們通常和前一項元素結合.
 (3). 第三級的是錨定和序列(sequence ) 錨定包括(^) 表明字串的開頭,($) 表明結尾,(/b) 詞界符,(/B) 非詞界符.序列(一個元素緊接著一個元素)實際上是一種操作 ,雖然它沒有使用元字元.這段話的含義是一個單詞中的字母結合更緊密 ,就像錨定緊貼字母一樣.
 (4).優先順序最低的是豎線( |),表示或.由於其優先順序最低,它通常將模式劃分成幾個部分 .它在優先順序最底端是因為我們希望像|/fred|barney/裡面的字母比或(|) 結合更緊密. 如果或(| )的優先順序比序列的優先順序更高, 那麼,上述模式的含義是匹配 fre,
接著是 d 或者 b , 然後是 arney.因此,或( |)的優先順序最低 ,字母序列的優先順序要高些 .

27.  一個模式比對測試程式#! /usr/bin/perl<br />while(<>){<br /> chomp;<br /> if(/YOUR_PARTTEN_GOES_HERE/){<br /> print "Matched: |$`<$&>$’|/n";#特殊的變數<br />}else{<br /> print “No match: |$_|/n”;<br />} 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.