2012-01-23 27 views
0

我有以下的正則表達式,它幾乎是我需要的一切:需要幫助一個特定的規則創建的正則表達式

^[a-z0-9][a-z0-9][a-z0-9]{2,62}$ 

我需要的是以下規則支持:

每一個破折號( - )字符必須緊接前後,後面跟一個字母或數字;連續的破折號不被允許。

僅供參考,這裏有所有的規則,正則表達式必須支持:

  1. 必須以字母或數字開頭,並且只能包含字母,數字和破折號( - )字符。

  2. 每個破折號( - )字符必須緊接前後緊跟一個字母或數字;連續的破折號不被允許。

  3. 所有字母必須小寫。

  4. 長度必須爲3到63個字符。

+0

你必須讓這一切都在一個正則表達式?另外,我們使用哪種正則表達式方言? – derobert

+0

這是用於.NET的,如果可能的話,我希望在一個正則表達式中使用它。 –

+0

我不知道.NET的正則表達式語法,但我認爲我的負面匹配可能跟着它(至少刪除解釋性註釋和空格) – derobert

回答

1

這會給你想要的結果

^(?-i)(?:[a-z0-9]|(?<=[0-9a-z])-(?=[0-9a-z])){3,63}$ 

^ m串

(?-i)不區分大小寫

(?:開始非捕獲組

[a-z0-9]匹配AZ或0-9

|

(?<=[0-9a-z])-(?=[0-9a-z])匹配- aslong作爲其前面和superceed的ATCH開始通過az或0-9 這使用向後看和向前看的字符串

)緊密的,非捕獲組

{3,63}重複3組63次

$比賽結束

0

這似乎是你要找的內容,除了長度:

^([a-z0-9]|[a-z0-9]-[a-z0-9])+$ 

你不能把上的長度,因爲序列a-a(這是儘管長度爲3,那麼它將被視爲一次重複。

如果你可以否定匹配,那麼你可以做這樣的事情(爲了可讀性而添加空格和換行符,認爲是標誌/x

# reject if... 
[^a-z0-9]  # any character other than a-z0-9 
| (^.{64})  # has a 64th character 
| (^.{0,2}$) # is 0–2 characters 
| (--)   # consecutive dashes 
| (^-)   # starts with dash 
| (-$)   # ends with dash 

無法保證匹配的效率。

3

這應該滿足你的前三個要求:

^[a-z0-9]+(-[a-z0-9]+)*$ 

最後的要求可以通過額外的正則表達式或前瞻主張得到滿足,如果支持的話:

^(?=.{3,63}$)[a-z0-9]+(-[a-z0-9]+)*$ 
+0

我最終使用'^ [a-z0-9] +( - [a-z0-9] +)* $'這將滿足我的需求。我可以分別檢查長度要求。謝謝 –