2013-10-03 53 views
0

首先,我要感谢任何花时间阅读我的文章的人。REGEX匹配filenname约定

那么,我是正则表达式世界的新手,我可以创建非常基本的REGEX,但现在我想跳转到更复杂的一个。

目的是仅匹配那些文件名至极METS下一命名约定:

文件名应具有一定的炭组合开始,那么它应该跟随任意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对其进行编码。

我希望有人能帮助我。

所有的建议都被广泛接受。

感谢大家。

+1

您是否试图解决'正则表达式'。如果是,那么你可以展示给我们。也让我们知道你在哪里面临问题。 – Smit

+0

Hello @Smit。我试图测试你们发给我的建议。我正在尝试在线java测试人员,因为我不在我的个人计算机上编写代码。但是,我无法使用此匹配,例如:http://java-regex-tester.appspot.com/ – JoseTlaseca

+0

它现在有效。我尝试使用[link] http://myregextester.com/index.php并标记了Java复选框,它向我展示了内部生成的代码的预览,并且我注意到“\\”导致它不适用于我因为它试图与下一个模式匹配: 'code'Pattern。编译(“^(ABCD | HIJK)\\\\ d {4} _”);'代码' 所以我删除了两个“\”之一,它工作得很好。 所有的建议都适用于我的案例,不幸的是我不能将所有标记为有效的,因此我决定将我的投票给予@barnesjd,让他逐步解释他的时间。 谢谢你们! – JoseTlaseca

回答

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()); 
1

只是这样的:

^(ABCD|HIJK)\\d{4}_