我需要在正则表达式中开发这个模式:
模式:
201410021600(12个数字)-Only两个选项A或B_(ZZ始终相同)616048(6个数字)_BBBB(4个字符)-123456ABCDEF(12个数字)_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有人能帮我吗?
发布于 2014-10-09 10:41:34
您不需要为1指定一个数量,也就是说,只需要-{1}或_{1},只要-或_就足够了。
此外,您要在这里指定两次数量:\d{6}{1},这是不必要的。
第三,\b标记一个单词边界,这意味着至少需要一些空白。因此,\bZZ\b将与您的输入不匹配。
应用所有这些,您的regex看起来是这样的,并且应该可以工作:\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] UPDATE:从您的评论中可以看出,A和B似乎都是单词,而不仅仅是字符,因此您不能在这里使用字符类,而需要使用组,例如-(?>A|B) ((?>...)表示组不捕获,即不能使用Matcher.group(x)等)。_(ZZ always same) -> _ZZ616048(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-zA-Z]而不是[A-Z])的字符类中添加a-z,或者在表达式前面添加(?i) (如果总是允许小写)。
发布于 2014-10-09 10:40:43
尝试以下模式:
Pattern p =Pattern.compile("\\d{12}-[AB]_ZZ\\d{6}_\\w{4}-\\w{12}_OUT.pdf");发布于 2014-10-09 10:41:31
^\d{12}-[AB]_ZZ\d{6}_[a-zA-Z]{4}-[a-zA-Z0-9]{12}_OUT\.pdf$试试this.Validates你所有的规则。
http://regex101.com/r/iM2wF9/19
https://stackoverflow.com/questions/26276239
复制相似问题