2013-12-10 74 views
1

我想的創建返回true一種功能,當字符串沒有字符的特定組(本例中的組是「DontMatchMe」)正則表達式匹配組

如此,下面的例子:

example1 
examDontMatchMeple2 
example3 
examDontMatchMeple4 
example4 

有效匹配爲:

example1 
example3 
example4 

我的第一選擇是使用模式.*(?!DontMatchMe).*.*是消耗一切,這場比賽總是如此。

請注意,我實際使用的字符串的值是隨機的。例如,我不能使用「exe」來構建正則表達式。 「DontMatchMe」也是隨機的。

回答

2

爲了排除特定的詞,你可以使用一種模式是這樣的:^(?!.*DontMatchMe).+

爲了避免問題與.*消耗一切你可以錨定模式字符串的開頭。該模式擊穿如下:

  • ^:錨字符串
  • (?!.*DontMatchMe)的開頭:負前瞻匹配任何字符和文本被忽略
  • .+:最後,匹配一個或多個字符(只要這會發生,因爲先行沒有匹配)

例子:

string[] inputs = 
{ 
    "example1", 
    "examDontMatchMeple2", 
    "example3", 
    "examDontMatchMeple4", 
    "example4" 
}; 

string ignoreText = "DontMatchMe"; 
string pattern = String.Format("^(?!.*{0}).+", Regex.Escape(ignoreText)); 

foreach (var input in inputs) 
{  
    Console.WriteLine("{0}: {1}", input, Regex.IsMatch(input, pattern)); 
} 
+0

謝謝。我編輯了這個問題。你認爲它仍然適用? –

+0

@HélioSantos更新了我的回覆 –

0

如果這是您要檢查一個簡單的非正則表達式的字符串,你可以簡單地使用Contains方法和反轉結果:

bool doesNotContain(string s, string group) { 
    // error check for nulls first (not included here) 
    return !s.Contains(group); 
} 

如果你想你的小組可能是一個正則表達式,你仍然可以使用相同的原則。尋找你不想要的模式,如果有,返回false,否則返回true。這可能更易於閱讀和理解,特別是對於不熟悉正則表達式的更高級概念的人員,例如負面預測。