0

[LCK_ or OPN_] に一致する文字列を除外する必要があるのは、ファイル名の先頭のみで、それ以外の場所は考慮しません。

ソース文字列の例:

LCK_card_L02NOR19999_2012-11-07-121600 [Invalid/Filter it]
BLTM_L183ROP3289_2012-11-07-121601 [Valid one]
TEMP_LCK_card_L02NOR19999_2012-11-07-121600 [Valid one]

私はこのように試しました:

LCK_|OPN_

しかし、TEMP_LCK_XXXXX にも一致しています。

リクエストのパターンをどのように組み合わせますか [LCK_ または OPN_ を無視して日付を抽出]?

日付抽出の正規表現パターン

(19|20)\\d\\d[-](0[1-9]|1[012])[-](0[1-9]|[12][0-9]|3[01])[-]\\d\\d\\d\\d\\d\\d]
4

3 に答える 3

1

^(LCK_|OPN_)-^入力の開始を表します。

これを残りの正規表現と組み合わせるには、任意の数の任意の文字をスキップします。

^(?:LCK_|OPN_).*(19|20)\\d\\d.....

(キャプチャしてグループに入れたくない場合に使用し?:ます)。LCK_OPN_

于 2012-12-06T08:10:26.707 に答える
1

ファイルの先頭ですか、それとも行の先頭ですか?

これを試して...

"^(LCK_|OPN_).*"
于 2012-12-06T08:13:40.550 に答える
1

次のコードを検討してください。

String[] strs = new String[] {
    "LCK_card_L02NOR19999_2012-11-07-121600", // Invalid
    "BLTM_L183ROP3289_2012-11-07-121601", // Valid one
    "TEMP_LCK_card_L02NOR19999_2012-11-07-121600" // Valid one
};

String pattern = "^(?!(LCK_|OPN_))(.*)((19|20)[0-9]{2}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])-[0-9]{6}).*";

for (String string : strs) {
    boolean m = string.matches(pattern);
    System.out.println(m ? "Valid" : "Invalid");
}

これは、最初に文字列の先頭 ( で示される^)、次にor以外 ( で示される)、0 個以上の任意の文字、次に日付パターン、場合によっては文字数に一致します。LCK_OPN_?!

于 2012-12-06T08:17:49.903 に答える