Javaの正規表現でわからないことがあります。次の文字列があります(「to Date」が必要です):
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 では、このパターンは一致しません。しかし、前と最後に a を追加すると、.+
このパターンは Java で機能します。
Pattern p = Pattern.compile(".+to\\s+date\\s*?:\\s*?([0-9]{2}[\\./][0-9]{2}[\\./][0-9]{2,4}).+", Pattern.CASE_INSENSITIVE);
わからないこと: a ^
(行頭) と行末にa を追加すると、最初のパターンが Java で一致しないことは明らか$
です。つまり、パターンは行全体に一致する必要があります。しかし、それがなければ、最初のパターンは実際に一致するはずです。前と最後に区切り文字を設定しないと、パターンがこのパターンの範囲外の文字列データを気にするのはなぜですか? これは私には論理的ではありません。私の意見では、最初のパターンは String クラスの「contains」メソッドと同様に動作するはずです。そして、Perl もそうだと思います。