2014-02-25 93 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)是让你的正则表达式不区分大小写。