0

首先,我要感谢所有花时间阅读我帖子的人。

好吧,我是 Regex 世界的新手,我能够创建非常基本的 REGEX,但现在我想跳到更复杂的一个。

目的是只匹配那些符合下一个命名约定的文件名:

文件名应该以某个字符组合开头,然后应该是任何 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(它匹配一个有效的起始字符串和 4 位数字,但它不匹配下划线。

我将使用 Java 对此进行编码。

我希望有人能帮助我。

所有建议都被很好地接受。

谢谢大家。

4

2 回答 2

1

就像这样:

^(ABCD|HIJK)\\d{4}_
于 2013-10-03T18:39:15.360 回答
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 回答