Javaの正規表現でわからないことがあります。私は、次の文字列を持っている(と私は「日に」必要があります):境界マッチャー "Beginning of line"なしで正規表現が一致しないのはなぜですか?
From Date :01/11/2011 To Date :30/11/2011;;;;;;;;;;;;;
は私が(Perlで)次の正規表現がマッチしているだろうと思います。
to\\s+date\\s*?:\\s*?([0-9]{2}[\\./][0-9]{2}[\\./][0-9]{2,4})
Javaでは、このパターンは一致しません。私は前に、最後に.+
を追加した場合しかし、それはそう、このパターンは、Javaで動作しない:
Pattern p = Pattern.compile(".+to\\s+date\\s*?:\\s*?([0-9]{2}[\\./][0-9]{2}[\\./][0-9]{2,4}).+", Pattern.CASE_INSENSITIVE);
私は理解していない何を:最初のパターンがで一致していないだろうと私には明らかですJavaの場合は、^
(行の先頭)と$
を行末に追加します。つまり、パターンは行全体に一致しなければならないということです。しかし、それがなければ最初のパターンは実際に一致しているはずです。なぜなら、デリミタを前面と最後に設定しないと、パターンがこのパターンの範囲外の文字列データを気にするのですから?これは私には論理的ではありません。私の意見では、最初のパターンはStringクラスの "contains"メソッドと同様に動作するはずです。そして私はそれがPerlでそうだと思います。
[regexplanet](http://www.regexplanet.com/advanced/java/index.html)でJava regexpをテストできます。私はあなたのパターンがそこに。+の中で働くことさえできなかった。 –