根据模式查找文件的正则表达式中的错误

时间:2014-10-09 10:35:14

标签: java regex

我需要在正则表达式中开发此模式:

模式:

  

201410021600(12个数字) - 只有两个选项A或B_(ZZ始终为   相同)616048(6个数字)_BBBB(4个字符)-123456ABCDEF(12   alfanumeric)_OUT(总是相同).pdf(总是相同)

真实的例子:

  

201410021600-A_ZZ123456_BBBB-123456ABCDEF_OUT.pdf。

这是我的尝试,但没有奏效:(:

\d{12}-{1}A_{1}\bZZ\b\d{6}_{1}\d{4}-{1}\w{12}_{1}\bOUT.pdf\b

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

您不需要为1指定数量,即仅-{1}_{1}而不是-_就足够了。

此外,您在此处指定了两次数量:\d{6}{1}这是不必要的。

第三,\b标记一个单词边界,这意味着需要至少有一些空格。因此\bZZ\b无法与您的输入相匹配。

应用所有这些,你的正则表达式看起来像这样,应该可以工作:\d{12}-[AB]_ZZ\d{6}_[A-Z]{4}-[A-Z0-9]{12}_OUT\.pdf

要打破它:

  • 201410021600(12 Numbers) - > \d{12}
  • -Only two options A or B - > -[AB] 更新:从您的评论中看来,好像AB是单词,而不仅仅是字符,因此您无法使用字符类这里但需要使用组,例如-(?>A|B)(?>...)表示该群组无法捕获,即您无法使用Matcher.group(x)等检索该群组。)
  • _(ZZ always same) - > _ZZ
  • 616048(6 numbers) - > \d{6}
  • _BBBB(4 characters) - > _[A-Z]{4}(我假设只允许使用大写字母)
  • -123456ABCDEF(12 alfanumeric) - > -[A-Z0-9]{12}(如果只允许使用大写字符)
  • _OUT(always same) - > _OUT
  • .pdf(always same) - > \.pdf(点匹配任何字符,因此需要转义)

如果情况不是问题,即如果201410021600-a_zz123456_bbbb-123456abcdef_out.pdf.也应匹配,则将a-z添加到应允许小写的字符类(例如[a-zA-Z]而不是{{如果总是允许小写,则在表达式的前面添加[A-Z]

答案 1 :(得分:0)

尝试这种模式:

Pattern p =Pattern.compile("\\d{12}-[AB]_ZZ\\d{6}_\\w{4}-\\w{12}_OUT.pdf");

答案 2 :(得分:0)

^\d{12}-[AB]_ZZ\d{6}_[a-zA-Z]{4}-[a-zA-Z0-9]{12}_OUT\.pdf$

试试这个。验证你的所有规则。

http://regex101.com/r/iM2wF9/19