2010-06-25 96 views
1

我試圖在正則表達式中進行匹配。在正則表達式中分組

開始用C或H,W以下/ 6字符:

它必須具有以下格式字符的字符串相匹配。 (共7個字符長) 從KK開始,接着8個字符。 (共10個字符長)

該字段限制爲10個鍵入的字符。我有以下幾點:

(((C|H).{6})|(KK.{8}))

它匹配KK + 8就好了。它在C + 5上失敗了。它成功的C + 6就好了。然而它在C + 7,C + 8和C + 9上成功。

我假設我的分組是錯的,任何人都可以指出我的錯誤嗎?

這是.NET風格的正則表達式和我正在使用Regex.IsMatch來確定該字段是否完全匹配我的正則表達式。

回答

2

您需要anchor字符串的開始(^)和結束($):

^([CH].{6}|KK.{8})$ 

我還修剪了不必要的括號,改變(C|H)character class以提高可讀性。

+0

有趣的是,我在印象之下IsMatch確保了整個字符串匹配,我想我錯了。謝謝! – 2010-06-25 22:00:04

+0

@Aequitarum Custos:您可能一直在考慮Java中需要精確匹配的類似命名的方法'matches'。 – 2010-06-25 22:03:07

+0

啊哈,你說得對,.NET有同樣的事情。不用於驗證輸入字符串,用於解析。解釋我的困惑。 – 2010-06-25 22:10:16

1

你想從模式中捕捉任何東西嗎? 如果沒有,我會嘗試這一個:

^(KK..|C|H).{6}$ 
+0

+1功能更簡單。我相信以上是我的方法的正確方法,但這些字符串格式是狀態指定的,並且可以獨立於另一個進行更改。 – 2010-06-25 22:04:02

1

您需要添加一行anchors的起點和終點:

^(((C|H).{6})|(KK.{8}))$ 
0

我喜歡馬克·拜爾斯回答最好,此例中(用於測試。 NET):

^[CH].{6}$|^KK.{8}$ 

原件將給出錯誤的匹配用於與C或H.

後超過6個字符的值