2011-06-29 46 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)不用于终止,因此它们可以像字符串中的任何其他字符一样存在。