18

\vマッチングとその組み合わせについて (垂直空白) をテストしましたが、 と が一致しない\r\nことがわかりました。以下は私が使用している私のコードです..\v\r\n

$string = "
Test
";

if (preg_match("#\v+#", $string )) {
  echo "Matched";
} else {
  echo "Not Matched";
}

より明確にするために、私の質問は、一致する他の代替手段はあります\r\nか?

4

7 に答える 7

7

\v完全にうまく機能するため、これは代替案の質問には答えません

\v垂直空白と見なされる任意の文字に一致します。これには、プラットフォームのキャリッジ リターンとライン フィード文字(改行)、およびその他のいくつかの文字が含まれます。これらはすべて、以下の表に一覧表示されています。

"#\v+#"どちらかに変更するだけです

  • "#\\v+#"バックスラッシュをエスケープする

また

  • '#\v+#'一重引用符を使用する

どちらの場合も、 と の任意の組み合わせに一致し\rます\n

アップデート:

と比較して の範囲を\v明確にするため\Rに、perlrebackslashから

  • \R
    \Rは一般的な改行に一致します。つまり、Unicode によって改行シーケンスと見なされるものはすべてです。これには、 (縦の空白) に一致するすべての文字が含まれます...\v
于 2014-05-15T05:03:03.477 に答える
6

[\r\n]パターンでリテラルを使用できない奇妙な要件がある場合は、代わりに常に 16 進数のエスケープ シーケンスを使用できます。

preg_match('#[\xD\xA]+#', $string)

これは と同等のパターンです[\r\n]+

于 2013-09-24T17:58:55.943 に答える
1

特定の文字列のすべての行に一致させるには、単純に^$アンカーを使用して、正規表現エンジンに複数行モードで動作するようにアドバイスします。次に^$、文字列全体の開始と終了ではなく、各行の開始と終了に一致します。

http://php.net/manual/en/reference.pcre.pattern.modifiers.php

PHP ではm、パターンの後の修飾子になります。/^(.*?)$/m指定された文字列内の垂直スペースで区切られた各行に単純一致します。

ところで:行分割の場合、次split()PHP_EOL定数も使用できます。

$lines = explode(PHP_EOL, $string);
于 2013-09-24T17:55:25.003 に答える
0

この正規表現は、改行文字\nと改行\r 文字にも一致します。

(?![ \t\f])\s

デモ

1 つ以上の改行文字またはキャリッジ リターン文字に一致させるには、以下の正規表現を使用できます。

(?:(?![ \t\f])\s)+

デモ

于 2014-10-20T02:48:01.143 に答える
0

問題は、複数行オプション、またはドットを使用する場合は 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";
于 2013-09-24T17:55:40.067 に答える
0

PHP で改行に一致させるには、php 定数を使用しますPHP_EOL。これはクロスプラットフォームです。

if (preg_match('/\v+' . PHP_EOL ."/", $text, $matches ))
   print_R($matches );
于 2013-09-24T17:57:00.263 に答える