0

まず最初に、私の投稿を読んでくれている人に感謝します。

まあ、私は正規表現の世界の初心者です。非常に基本的な正規表現を作成できますが、今はより複雑なものにジャンプしたいと考えています。

目的は、次の命名規則を満たすファイル名のみを照合することです。

ファイル名は、特定の char の組み合わせで始まり、その後に任意の 4 つの数字とアンダースコアが続く必要があります。ファイル名の残りの部分を気にする必要はありません。

ファイル名の開始には、特定の有効な組み合わせがあります。

ABCD
HIJK

ファイル名の唯一の有効な開始文字列です。

たとえば、次の文字列は有効です。

ABCD9403_XXXXXXXXXXXX.XXX(ABCD で始まり、4 桁、アンダースコアが続くため) HIJK6701_xXxXxX.xXx(HIJK で始まり、4 桁、アンダースコアが続くため)

ただし、次のものは無効です。

AMCD6987_xxxxxx.xxx(AMCD は上記の有効な開始文字列のいずれにも一致しないため: ABCD または HIJK)

HIJK12F2_xxxxxxx.xxx(有効な文字列 (HIJK) で始まりますが、次の部分に 4 桁が含まれていません (代わりに F が含まれています))

ABCD9547-21654sdasd321.321asd(有効な開始文字列の 1 つと 4 桁の数字に一致しますが、アンダースコアには一致しません。

これを Java を使用してコーディングします。

誰かが私を助けてくれることを願っています。

すべての提案は受け入れられます。

みんなに感謝します。

4

2 に答える 2

0

以前の回答に何か問題があることを示唆していません。それを説明するコメントで機能するものを含めると思いました。

Pattern p = Pattern.compile(
    "(?:"       + // Open a "non-capturing" group for our two letter sequences
    "ABCD"      + // The sequence ABCD ...
    "|"         + // OR ...
    "HIJK"      + // the sequence HIJK
    ")"         + // close the group
    "\\d"       + // A digit ...
    "{4}"       + // exactly 4 times
    "_"         + // an underscore
    ".*"          // Anything else.
);

assertTrue(p.matcher("ABCD9403_XXXXXXXXXXXX.XXX").matches());
assertTrue(p.matcher("HIJK6701_xXxXxX.xXx").matches());
assertFalse(p.matcher("AMCD6987_xxxxxx.xxx").matches());
assertFalse(p.matcher("HIJK12F2_xxxxxxx.xxx").matches());
assertFalse(p.matcher("ABCD9547-21654sdasd321.321asd").matches());
于 2013-10-03T18:57:47.903 に答える