perl慎重作出論斷


Perl爲正規表達式定義一致性擴展語句,比如註釋,聚類,植入改造,和零邊界的論斷。
   在前和在後的論斷有大概四個可能的積極的和消極的組合,積極的向前,消極的向前,積極的向後,和消極的向後。這些都允許你測試文本的存在和不存在,這些文本都符合一個普通的表達式,這個表達式並不消耗這個文本。
積極和消極的前綴處理存在或者不存在的文本,這個文本環繞一個特殊的樣式。向前或者向後意味着這個測試是否在文本中向前向後。
比如,爲了檢測三個數字它們在一個或多個數字之後,比如,當你插入一個逗號,使用一個積極的斷言。這個測試中至少有一個單個。在這3個數字中每個數字後重複使用逗號來完成測試。
記住,向前或者向後斷言是零邊界,這就意味着在斷言中的樣式不是匹配文本中的一部分。比如,$&--or $MATCH,在英語角度來說不包含斷言中的樣式。
看看下面的代碼:
$text = "this or that or the other";
$text =~ /(?<=that )or/i;
print "Before: '$`', Matched: '$&', After: '$'' ";
注意單詞that和被拖拽的空間不是匹配文本的一部分。取而代之的是在前面匹配的文本的一部分。
Perl支持下面的斷言:
(?=pattern) # zero-width positive look ahead
(?!pattern) # zero-width negative look ahead
(?<=pattern) # zero-width positive look behind
(?<!pattern) # zero-width negative look behind
下面有些例子解釋四個向前或者向後的斷言:
·/w+(?=s)/:積極向前:這個形式匹配一個或者多個被空白字符緊跟的單詞字符,但是其中並不包括匹配形式的空白字符。
·/d(?!d)/:消極向前:這個形式嚴格的匹配三個數字被其他非數字的字符緊跟的形式。這個不消耗非數字。
·/(?<=-)d/:積極向後:這個形式匹配四個數字,這四個數字由dash領先。Dash不是在匹配字符中被捕獲的。
·/(?<!,)d/:消極向前:這個形式匹配三個數字,這三個數字不被一個逗號領先。這個逗號不是匹配字符部分。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章