2011-06-29 102 views
2

我用一些字符打:什麼是「空」模式?

Patern Subject  Status 

'/#*/' "\x00"  Match 
'/#*/' ""   Match 
'//'  "\x00"  Match 
'//'  ""   Match 
'//'  "whatever" Match 
'/\x00/' "whatever" Fail 
'/\x00/' ""   Fail  

我意識到PHP字符串沒有默認爲NULL字符(\ X00) 那麼空模式'//'代表以匹配所有PHP字符串?

的Cuz如果我們看到在過去的模式:

'/\x00/' ""   Fail 

這表明空模式不是一個NULL字符。

我知道這是一個愚蠢的問題。 但是,好奇心讓我問。

回答

3

模式爲字符串提供了要求,如果符合要求,字符串匹配。一個空的模式沒有要求,所以所有的字符串都滿足它的所有要求。此外,如果您詢問模式匹配的位置,則空模式會匹配所有可能的位置。每個匹配的長度爲0,通過perl的一個例子(因爲你問Perl兼容正則表達式):

$x = "ab"; 
$x =~ s//./g; # this is search-replace in perl, replace all occurrences of // with . 
say $x; 

將打印.a.b.如在所有可能的位置(前一匹配的模式,一個和之間b和b)之後,但沒有替換任何字符(因爲匹配長度爲0)。

+0

謝謝你的好回答 – nEAnnam

+0

所以''''''''''/#* /''? – nEAnnam

+0

@nEAnnam:不完全。 '/#* /'確實會匹配所有的字符串,但是當字符串實際上包含一個或多個'#'時,匹配的長度將會不同。在某些情況下(「這是否匹配?」)這並不重要;在其他人確實(查找和替換)。 – derobert

0

PHP字符串不能像C字符串一樣工作。空字符(\x00)不用於終止,因此它們可以像字符串中的任何其他字符一樣存在。