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 />}