8,以正規表示式進行匹配(perl筆記)

tonykorn97發表於2007-06-22
1,以m//進行匹配
我們已經用過雙斜線的寫法來撰寫模式,比如/fred/。但事實上,這是m//運算子的簡寫。我們還可以把一對定界符放進任何一對界定符號內。例如:m(fred),m,m{fred},m[fred],還可以使用單一定界符m,fred, m!fred! m^fred^

此處的簡寫是指如果你選擇雙斜線作為界定符號,那麼你可以省略開頭的m。

2,選項修飾符
以/i來進行不區分大小寫的模式匹配

3,以/s來匹配任意字元
預設情況下,點號(.)無法匹配換行符,這對大多數“僅在單行進行匹配”的模式來講是說的通的。如果字串中含有換行符,而你希望點號能匹配它們,/s修飾符可以達成這個目的。它會將模式中的每個點號轉換成字符集[dD]所做的事,也就是匹配任何字元(包括換行符)。

4,用/x加上空白
加上/x修飾符之後,就可以在模式裡面隨意加上空白,目的是它看起來更容易閱讀,理解。
/-?d+.?d*/ #可以看明白嗎?
  / -? d+ .? d* /x
更詳細的解釋:
  /
-? #一個可有可無的減號
d+ #小數點之前有一個或多個數字
.? #一個可有可無的小數點
d* #小數點之後可能會有若干個數字
/x #模式的終點

5,組合選項修飾符
在同一個樣式裡,如果要用到兩個以上的選項修飾符,則可以將它們連續在一起使用,它們彼此的先後順序並不會影響匹配的結果。

6,錨點
^ 標示字串的開頭
$ 標示字串的結尾
有時候兩個錨點也會一起使用,例如:/^s*$/,代表一個空白行

7,單詞錨點
單詞邊界錨點,它所匹配的是一個單詞的頭尾兩端。
B 非單詞邊界錨點,它會匹配任何不匹配的位置。因此,模式/searchB/會匹配searches,searching與searched,但不匹配search或
researching.

8, 繫結運算子=~
匹配$_只是預設的方式而已。繫結運算子=~用來告訴perl拿右邊的模式來匹配左邊的字串,而非匹配$_
my $some_other = "I dream of betty rubble.";
if ($some_other = ~ /rub/) {
print "Aye,there's the rub. ";
}

9, 模式內的內插
#!/usr/bin/perl -w
my $what = "larry";

while (<>) {
if (/^($what)/) { #將模式定位在字串的起點
print "Ww saw $what in beginning of: $_";
}
}
不管$what的內容是什麼,當我們進行模式匹配的時候,該模式都會成為$what的值。在本例中,它和/^(larry)/是相同的意思,也就是在每一行的開頭尋找larry.

10, 匹配變數
到目前為止,每當我們在模式裡飾演圓括號的時候,都只是用來表示不同的模式組。但圓括號同時也啟用了正規表示式處理引擎的記憶功能。記憶功能是指,把圓括號裡的模式所時間匹配到的部分字串暫時記下來的能力。如果有一對以上的圓括號,就會有一份以上的記憶。每一份記憶所儲存的是原本的字串,而不是模式。
因為匹配變數所儲存的都是字串,所以他們都是標量變數。在perl裡,他們的命名方式像$1,$2。模式裡的括號有多少對,匹配的便利多久又多少個。
$_ = "Hello there,neighbor";
if (/s(w+)./) { #記憶空白與逗號間的單詞
print "the word was $1 ";
}
一次記憶多個
$_ = "Hello there,neighbor";
if (/(s+) (s+),(s+)/) {
print "words ware $1 $2 $3 ";
}

11, 自動匹配變數
字串裡實際匹配模式的部分會被自動存進$&
相符段落的前置字串會存到$`
後置字串則存到$'

12, 通用量詞
模式/a{5,15}/可匹配重複5到15次的字母a

13,優先順序
1,()
2, * + ? {5,15} {3,} {5}
3, ^ $ B
4, |

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/312079/viewspace-245693/,如需轉載,請註明出處,否則將追究法律責任。

相關文章