2011-06-29 11 views
2

私はいくつかの文字で遊んでいた:「空の」パターンとは何ですか?

Patern Subject  Status 

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

私はPHPの文字列は、デフォルト(\ X00)でNUL文字を持っていないことに気づい だから、空のパターン'//'は、すべてのPHPの文字列を一致させるために何を表していますか?

Cuzの私たちは最後のパターン見れば:

'/\x00/' ""   Fail 

をそれは空のパターンがNUL文字ではないことを示しています。

私はそれが愚かな質問であることを知っています。 しかし私に聞かせてくれる好奇心です。

答えて

3

パターンは、文字列の要件を満たしています。要件が満たされていれば、文字列は一致します。空のパターンには要件がないため、すべての文字列がすべての要件を満たします。

さらに、パターンが一致する場所を尋ねると、空のパターンがすべての可能な位置で一致します。各試合の長さは、Perlの例は0である(あなたは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:そうではありません。 '/#* /'は実際にはすべての文字列にマッチしますが、実際に文字列に1つ以上の '#'が含まれていると、一致の長さが異なります。いくつかの文脈では(「これは一致しますか?」)、これは問題ではありません。それ以外の場合は(検索&置換)します。 – derobert

0

PHP文字列はC文字列のようには機能しません。ヌル文字(\x00)は終了に使用されないため、文字列内の他の文字と同様に存在する可能性があります。

関連する問題