1

Java正規表現で複数行のテキストをチェックしたい。しかし、それは常に誤った結果を示しています。誰かが私に理由を説明できますか?

例えば:

11  12
11  12
11  12

これらの行をテストするために、私はを使用して11 12\r?\n+います。rubular正規表現チェッカーでは正常に機能していますが、http://www.regexplanet.com/advanced/java/index.htmlでは失敗します。私が試したもう1つの方法は(11 12.\r?\n){3,7}、rubular regex checkでは正常に機能しているが、regexplanetJavaでは失敗したというものです。繰り返しパターンを持つこのタイプの正規表現を確認する方法を教えてもらえますか?

4

1 に答える 1

2
11 12\r?\n+

に一致11 12し、その後にオプションのキャリッジリターンが続き、その後に1つ以上の改行が続きます(キャリッジリターンなし)。これは明らかにあなたが望むものではありません。

(11 12.\r?\n){3,7}

一致11 12し、その後に改行を除く1つの追加文字が続き、その後にオプションのCRと改行が続きます。このすべてが3〜7回繰り返されます。したがって、ここではドットが間違っています。代わりにこれを使用してください:

(11 12\r?\n){3,7}

最後に、文字列エスケープルールのために、通常はJava正規表現でバックスラッシュを2倍にする必要があることに注意してください(ただし、この特定のケースでは、文字列エスケープとしても機能するため\r、問題ありません)。\n

Pattern regex = Pattern.compile("(11 12\r?\n){3,7}");  // works the same as
Pattern regex = Pattern.compile("(11 12\\r?\\n){3,7}");
于 2013-03-04T06:36:11.500 に答える