0

任意の文字に一致する正規表現を見ています。私はそれを知っています。改行以外のプレースホルダーです。以下のこのコードを考えると:

$fruits = "One\nTwo\nThree";
preg_match_all('/^(.*)$/', $str, $matches);
print_r($matches);

なぜそれはまったく一致しないのですか?$matches[0]はOneTwoThreeになると思いますか?

4

1 に答える 1

2

修飾子「s」を正規表現に追加します。

この修飾子が設定されている場合、パターン内のドットメタ文字は、改行を含むすべての文字と一致します。これがないと、改行は除外されます。この修飾子は、Perlの/s修飾子と同等です。[^ a]などの負のクラスは、この修飾子の設定に関係なく、常に改行文字と一致します。

$fruits = "One\nTwo\nThree";
preg_match_all('/^(.*)$/s', $fruits, $matches);
print_r($matches);

アップデート:

$ FRuitsを一重引用符で囲むと、改行はそのように扱われず、置換も機能します。イベントは「s」修飾子がありません。しかし、出力が期待どおりかどうかはわかりません;)

   $fruits = 'One\nTwo\nThree';
   preg_match_all('/^(.*)$/', $fruits, $matches);
   print_r($matches);
于 2012-11-11T23:40:09.190 に答える