2017-01-16 82 views
0

我有以下的正则表达式:麻烦与正则表达式匹配最后一部分

solo_LL01_[\p{Alnum}|-]+_\d{10}_V\d{4}(1[0-2]|0[1-9])(3[01]|[12][0-9]|0[1-9])(2[0-3]|[01][0-9])([0-5][0-9])(I|C)?(_firsttest)?\.fits$ 

匹配反对:

solo_LL01_eui-fsi-174_0715246200_V201607271145C_firsttest.fits 

我想使firsttest文本的任何数字/字符。我尝试了一些变化,如:

solo_LL01_[\p{Alnum}|-]+_\d{10}_V\d{4}(1[0-2]|0[1-9])(3[01]|[12][0-9]|0[1-9])(2[0-3]|[01][0-9])([0-5][0-9])(I|C)?(_[\p{Alnum}_])?\.fits$ 

但似乎只是让它工作。 非常感谢所有帮助

回答

0

为什么不使用[A-Za-z0-9]+

solo_LL01_[\p{Alnum}|-]+_\d{10}_V\d{4}(1[0-2]|0[1-9])(3[01]|[12][0-9]|0[1-9])(2[0-3]|[01][0-9])([0-5][0-9])(I|C)?_([A-Za-z0-9]+)?\.fits$ 
1

综观Pattern文档,特别是约 “预定义字符类” 的部分:

\ W单词字符:[A-ZA-Z_0-9]

和 “量词”:

X *:X,零次或多次

X +:X,一次或多次

以下应匹配任何数量charatcter /数字: -

[\w]* 

对于一个或多个字符或数字: -

[\w]+ 

事实上,你尝试过什么也是正确的,只是你错过了量词*(任何数量的匹配)或+(1个或多个匹配)...所以你的正则表达式只是需要: -

solo_LL01_[\p{Alnum}|-]+_\d{10}_V\d{4}(1[0-2]|0[1-9])(3[01]|[12][0-9]|0[1-9])(2[0-3]|[01][0-9])([0-5][0-9])(I|C)?(_[\p{Alnum}_]*)?\.fits$ 

solo_LL01_[\p{Alnum}|-]+_\d{10}_V\d{4}(1[0-2]|0[1-9])(3[01]|[12][0-9]|0[1-9])(2[0-3]|[01][0-9])([0-5][0-9])(I|C)?(_[\p{Alnum}_]+)?\.fits$ 

根据其量词(*或+)你想使用