Что представляет собой «пустой» шаблон? - PullRequest
2 голосов
/ 29 июня 2011

Я играл с некоторыми персонажами:

Patern    Subject       Status

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

Я понял, что строка PHP по умолчанию не имеет символа NUL (\ x00) Итак, что представляет собой пустой шаблон '//' для соответствия всем строкам PHP?

Потому что, если мы видим последний шаблон:

'/\x00/'  ""            Fail  

Показывает, что пустой шаблон не является символом NUL.

Я знаю, что это глупый вопрос. Но это то любопытство, которое заставляет меня спрашивать.

Ответы [ 2 ]

3 голосов
/ 29 июня 2011

Шаблон задает требования для строки. Если требования выполняются, строка соответствует.Пустой шаблон не имеет требований, поэтому все строки соответствуют всем его нулевым требованиям.

Далее, если вы спросите, где шаблон соответствует, пустой шаблон соответствует всем возможным позициям.Длина каждого совпадения равна 0. Пример из perl (так как вы спрашиваете о регулярных выражениях, совместимых с perl):

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

напечатает .a.b. как образец, найденный во всех возможных позициях (домежду a и b и после b), но не заменяет никакие символы (поскольку длина совпадения равна 0).

0 голосов
/ 29 июня 2011

PHP-строки не работают как C-строки.Нулевые символы (\x00) не используются для завершения, поэтому они могут существовать как любой другой символ в строке.

...