2017-01-16 78 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$ 

根據其量詞(*或+)你想使用