\v
マッチングとその組み合わせについて (垂直空白) をテストしましたが、 と が一致しない\r\n
ことがわかりました。以下は私が使用している私のコードです..\v
\r
\n
$string = "
Test
";
if (preg_match("#\v+#", $string )) {
echo "Matched";
} else {
echo "Not Matched";
}
より明確にするために、私の質問は、一致する他の代替手段はあります\r\n
か?
\v
完全にうまく機能するため、これは代替案の質問には答えません
\v
垂直空白と見なされる任意の文字に一致します。これには、プラットフォームのキャリッジ リターンとライン フィード文字(改行)、およびその他のいくつかの文字が含まれます。これらはすべて、以下の表に一覧表示されています。
"#\v+#"
どちらかに変更するだけです
"#\\v+#"
バックスラッシュをエスケープするまた
'#\v+#'
一重引用符を使用するどちらの場合も、 と の任意の組み合わせに一致し\r
ます\n
。
アップデート:
と比較して の範囲を\v
明確にするため\R
に、perlrebackslashから
- \R
\R
は一般的な改行に一致します。つまり、Unicode によって改行シーケンスと見なされるものはすべてです。これには、 (縦の空白) に一致するすべての文字が含まれます...\v
[\r\n]
パターンでリテラルを使用できない奇妙な要件がある場合は、代わりに常に 16 進数のエスケープ シーケンスを使用できます。
preg_match('#[\xD\xA]+#', $string)
これは と同等のパターンです[\r\n]+
。
特定の文字列のすべての行に一致させるには、単純に^$
アンカーを使用して、正規表現エンジンに複数行モードで動作するようにアドバイスします。次に^$
、文字列全体の開始と終了ではなく、各行の開始と終了に一致します。
http://php.net/manual/en/reference.pcre.pattern.modifiers.php
PHP ではm
、パターンの後の修飾子になります。/^(.*?)$/m
指定された文字列内の垂直スペースで区切られた各行に単純一致します。
ところで:行分割の場合、次split()
のPHP_EOL
定数も使用できます。
$lines = explode(PHP_EOL, $string);
問題は、複数行オプション、またはドットを使用する場合は dotall オプションが必要なことです。デリミタの最後にあります。
http://www.php.net/manual/en/regexp.reference.internal-options.php
$string = "
Test
";
if(preg_match("#\v+#m", $string ))
echo "Matched";
else
echo "Not Matched";
PHP で改行に一致させるには、php 定数を使用しますPHP_EOL
。これはクロスプラットフォームです。
if (preg_match('/\v+' . PHP_EOL ."/", $text, $matches ))
print_R($matches );