2014-02-25 37 views
4

我需要建立正則表達式匹配以下字符串:無法使用正則表達式與「?」匹配字符串

  1. CCN
  2. CreditCardNum
  3. CreditCardNUmber
  4. CCNumber

我建造它,如下所示: C(redit)?C(ard)?N(um|umber)?
它不匹配「CreditCardNumber」字符串。
我也試過:C(redit)?C(ard)?N(:?um|umber)沒有成功

回答

7

你的模式好,你需要補充的是:(?i)在開始時

或IGNORECASE在正則表達式的選項。 RegexOptions.IgnoreCase

注:因爲你不需要捕獲「REDIT」或「ARD」,非捕獲組(?:...)更好:

(?i)C(?:redit)?C(?:ard)?N(?:um(?:ber)?)? 

如果你想擁有與案件更多的控制:

C(?i:redit)?C(?i:ard)?N(?i:um(?:ber)?)? 

爲了增強安全性,你可以在開始時並在圖案\b

+1

你可以使用'RegexOptions.ExplicitCapture' /'(?n)',而不是用'(?:)'搞亂正則表達式。 '(?in)C(redit)?C(ard)?N(um(ber)?) – Athari

+0

@Athari:的確,但您放棄了同時使用內聯修飾符的靈活性。 –

2

嘗試的末尾添加單詞邊界

(?i)C(?:redit)?C(?:ard)?N(?:um(?:ber)?)? 

(?i)是讓你的正則表達式不區分大小寫。