2011-08-01 51 views
0

如何使用內置的.NET機制或類似的東西自動逃避所有的正則表達式字符?如何在使用.Net正則表達式時將正則表達式視爲純文本?

我正在使用正則表達式類來查找正則表達式的匹配。見下面的例子。

string pattern = "abc"; 
Regex regexp = new Regex(@"a\w", RegexOptions.None); 
if (regexp.IsMatch(pattern)) 
{ 
    MessageBox.Show("Found"); 
} 

所以,這裏找到了。

現在,在某些情況下,我仍然想使用Regex類,但將正則表達式視爲純字符串。因此,例如,我會將模式字符串更改爲@「a \ w」,並且需要Regex類才能找到匹配項。

string pattern = @"a\w"; 
Regex regexp = new Regex(@"a\w", RegexOptions.None); 
if (regexp.IsMatch(pattern)) 
{ 
    MessageBox.Show("Found"); 
} 

在上述情況下,「Found」也應該命中。 所以,問題是如何將正則表達式轉換爲或作爲一個普通的字符串或像可以在正則表達式類中使用的東西?如何實現上面的代碼片段場景?

注意: - 我不想使用string.Contains,string.IndexOf等進行純文本字符串匹配。

回答

2

你可以在 「德正則表達式」 的字符串通過Regex.Escape。這會將您的模式搜索轉換爲正確轉義的正則表達式版本。

string pattern = @"a\w"; 
Regex regexp = new Regex(Regex.Escape(@"a\w"), RegexOptions.None); 
if (regexp.IsMatch(pattern)) 
{ 
    MessageBox.Show("Found"); 
} 
+0

如何使用內置函數自動轉義所有正則表達式字符,在.NET機制或類似的東西? –

+0

這就是該方法的用途。它將輸入字符串轉換爲與文字輸入相匹配的正則表達式字符串。 –

+0

非常感謝!這就是我一直在尋找的東西。 –

0

你只需要逃避你的特殊字符,例如:在你不想要搜索的內容\w意味着正則表達式的第二種情況@"a\\w"

+1

三根斜線?認爲你的意思是兩個 –

1

,你要搜索的文字\w,所以你想要的:

string pattern = @"a\w"; 
Regex regexp = new Regex(@"a\\w", RegexOptions.None); 
if (regexp.IsMatch(pattern)) 
{ 
    MessageBox.Show("Found"); 
} 

(注意轉義)

+0

實際上,@「a \ w」或@「a \\ w」將是來自UI文本框的用戶輸入。所以,內部代碼實現負責修改輸入模式。用戶可以選擇她選擇匹配爲正則表達式還是文字(普通)。在這種情況下,模式字符串必須在非正則表達式文本中修改。有沒有辦法通過編程。 –

+0

即時通訊不知道任何內置的機制,儘管id有興趣,如果任何人都知道一個。手動你將不得不逃避所有正則表達式字符,即用'\ [','(''用'\(','.'用'\ .'等替換''') –

+0

請看下面的漢斯的回答。通過Regex.Escape刪除你的字符串,這將把你的模式轉換爲正確的搜索模式轉換爲正確的轉義正則表達式版本 –

相關問題