2015-04-23 30 views
0

我想檢查我的學生獲得的正則表達式這個問題正確的混合物:RexEx匹配一個正則表達式與排列和選擇

我們希望有一個從1數到6後記信從a到d可以寫成小或大。所以像1D,2A,4B,...

我想從我的學生都應該像這兩個[1-6][a-dA-D][123456][abcdABCD]或混合物,和第二者的所有排列的正則表達式。

在我的研究,我發現了排列this answer

^(?:([1-4])(?!.*\1)){4}$ 

,它的工作原理是它自己(以及沒有^$),但是當我有一個選擇,運營商結合起來(|),它允許以及像[111111][a-dA-D]這樣的重複,這不是我想要的。

這是我嘗試直到尚未:

[\[]((?:([1-6])(?!.*\1)){6}|[1]\-[6])[\]][\[]((?:([a-dA-D])(?!.*\1)){8}|([a][\-][d][A][\-][D]|[A][\-][D][a][\-][d]))[\]] 

TESTDATA:

[1-6][A-Da-d] 
[123456][a-dA-D] 
[654321][AaBbCcDd] 
[241365][abcdABCD] 
+0

你能使你的問題更具有表現力,加上要針對其運行正則表達式的一些樣品示例和測試數據? –

+3

這似乎是驗證答案的不好方法。僅僅通過一組測試用例來驗證答案就會更容易和更清晰。 – beerbajay

+0

要麼根據一組測試用例驗證它,要麼自己分析正則表達式來驗證它 - 分配很簡單,所以這種驗證應該很簡單。檢查排列組合對於正則表達式來說並不適合。 –

回答

0

爲了驗證regex我會建議運行一些單元測試他們驗證您所期待的東西。 ..至少我會有:

  • 一個測試,驗證它是一個有效的正則表達式。編譯它。
  • 驗證它的測試與簡單用例相匹配。 1A1B
  • 測試,驗證對無效使用情況下,像A1B1^d88D