2012-12-21 92 views
1

我嘗試使用下面的正則表達式時遇到問題:正則表達式愁楚C#

string profileConfig = File.ReadAllText(str); 

string startIndex = "user_pref(\"network.proxy.autoconfig_url\", \""; 
string endIndex = "\""; 

var regex = startIndex + "(.*)" + endIndex; 
// Here we call Regex.Match. 
Match match = Regex.Match(profileConfig, 
          regex, 
          RegexOptions.IgnoreCase); 

// Here we check the Match instance. 
if (match.Success) 
{ 
    // Finally, we get the Group value and display it. 
    string key = match.Groups[1].Value; 
    MessageBox.Show(key); 
} 

我得到的錯誤:

Additional information: parsing "user_pref("network.proxy.autoconfig_url", "(.*)"" - Not enough)'s.

是我的正則表達式在某些方面存在格式錯誤?

+0

(在正則表達式一個sepcial字符,你應該看看逃脫它在你的startIndex字符串中。 – ryadavilli

+0

你應該用'。'代替'。'。 '。'字符會捕獲任何字符,我想你只想捕獲'。' –

+0

因爲re gular表達式有一個非常敏感的結構,我認爲這是一個很好的練習可讀性和維護性 - 明智地使用[逐字串字符串](http://msdn.microsoft.com/en-us/library/aa691090(v = vs.71).aspx),以避免字符串轉義和正則表達式轉義之間的混淆。 – DoomMuffins

回答

8

逃離第一支架如果你打算字符(逐字匹配:

string startIndex = "user_pref\\(\"network.proxy.autoconfig_url\", \""; 
+0

您需要轉義轉義:''user_pref \\(\「network.proxy.autoconfig_url \」,(使用兩個\\),否則C#編譯器會認爲它是一個它假定要處理的轉義序列,而不是一個正則表達式的轉義 – vcsjones

+2

然後,你可以嘗試使用Regex.Escape(startIndex)。 –

+0

是的謝謝 - 編輯。 –

0

糾正這一點,

"user_pref(\"network. -> "user_pref\(\"network. 
           ^