2014-12-01 80 views
0

我正在嘗試創建一個正則表達式,該正則表達式最多允許50個字符的名稱加上最多8個附加字符作爲版本號。我有一個正確的表達式,除了有人刪除名稱和版本號之間的空間之外。下面是正則表達式:正則表達式可選空間解決方案

^([\w\W]{3,50})(\s\(v[\d]{1,4}\)){0,1}?$ 

它正確地匹配這個例如:

acvbg yuleacvbg yuleacvbg yuleacvbg yuleacvbg yule (v9999) 

,但是,如果我刪除附加的版本號之間的空間,我不再有比賽

acvbg yuleacvbg yuleacvbg yuleacvbg yuleacvbg yule(v9999) 

我如何獲得這兩個例子的工作?

+0

正則表達式之前,前首先檢查空間'('如果不存在,添加一個 – RST 2014-12-01 21:16:02

+0

'[\ W \ W]'匹配一切。 。 – sln 2014-12-01 21:16:17

回答

0

可以使空間本身可選:

^([\w\W]{3,50})(\s?\(v[\d]{1,4}\)){0,1}?$ 
       ^

這允許0或1的空間。要允許的空間(包括無)的任意數,你可以使用*量詞

^([\w\W]{3,50})(\s*\(v[\d]{1,4}\)){0,1}?$ 
       ^

此外,[\w\W]意味着「單詞字符或一個非單詞字符」,它匹配任何字符。所以[\w\W]可以用.代替。

最後,表達式末尾的{0,1}可以簡單地省略,因爲版本號的可選性已經由?表示。

因此,表達式可以簡化爲:

^(.{3,50})(\s*\(v[\d]{1,4}\))?$