0

前回質問した続きです。文字列 String1、String2、String3、String4 で囲まれた日付パターンを抽出する必要があります。私がしたことは

Pattern pattern = Pattern.compile("(?<=String1\sString2\s(?:0?[1-9]|[12][0-9]|3[01])([- /.])(?:0?[1-9]|1[012])\\1(?:19|20)?\\d\\d?=\sString3\sString4)");

私のデートパターンは

(0?[1-9]|[12][0-9]|3[01])([- /.])(0?[1-9]|1[012])\\2(19|20)\\d\\d

これは問題なく動作しますが、文字列で囲もうとすると問題が発生します。

日付は String2 と String3 の間にあります。プログラムに無効なエスケープシーケンスを示すエラーがあるため、何か問題があると確信していますが、それを理解できません。どんな助けでも大歓迎です。前もって感謝します。

4

3 に答える 3

3

ここでは、無効なエスケープ シーケンスがあります。

"...(?<=String1\sString..."
               ^^

バックスラッシュ リテラルを Java String でエスケープして、正規表現パターンに渡す必要があります。

"...(?<=String1\\sString..."
               ^^^

\\dfor 数字についてはすでに正しく理解できましたが、 \\sfor 空白についてはそうではありませんでした。

于 2013-08-05T14:24:08.030 に答える
1

多くの人が素晴らしいクラスの機能を認識していないことを知っているMessageFormatので、ここで簡単に思い出してください。

MessageFormat format = new MessageFormat("String1 String2 {0,date} String3 String4");
try {
    Object[] parse = format.parse("String1 String2 31.8.2000 String3 String4");
    Date date = (Date) parse[0];
    System.out.println(date);
} catch (ParseException e) {
    e.printStackTrace();
}
于 2013-08-05T15:39:23.190 に答える