什么是“空”模式代表什么?

时间:2011-06-29 19:08:19

标签: php regex null preg-match pcre

我正在玩一些角色:

Patern    Subject       Status

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

我意识到默认情况下PHP字符串没有NUL字符(\ x00) 那么空模式'//'表示匹配所有PHP字符串是什么?

如果我们看到最后一个模式,那就是

'/\x00/'  ""            Fail  

它表明空图案不是NUL字符。

我知道这是一个愚蠢的问题。 但这种好奇心让我问起。

2 个答案:

答案 0 :(得分:3)

模式给出字符串的要求,如果满足要求,则字符串匹配。空模式没有要求,因此所有字符串都满足其所有要求。

此外,如果您询问模式匹配的位置,则空模式将匹配所有可能的位置。每个匹配的长度为0.来自perl的一个例子(因为你问的是perl兼容的regexp):

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

将打印.a.b.作为在所有可能位置(a之间,a和b之间以及b之后)匹配的模式,但不替换任何字符(因为匹配长度为0)。

答案 1 :(得分:0)

PHP字符串不像C字符串那样工作。空字符(\x00)不用于终止,因此它们可以像字符串中的任何其他字符一样存在。