2013-08-01 76 views
0

我想提取從一個網站的鏈接RTMP和迄今已設法找到它位於哪裏行:正則表達式出錯了 - 哪些字符需要轉義?

string line = GetLine(innerHTML, "turbo:"); 

// The string line now contains something like this: 
// turbo: 'rtmp://fcs21-1.somewebsite.com/reflect/2996910732;0', 

Match match = Regex.Match(line, @"turbo: '(rtmp://[*]+);0',$", 
    RegexOptions.IgnoreCase); 

string key; 
if (match.Success) 
    key = match.Groups[1].Value; 

目前沒有任何比賽。我想從該行提取:

turbo: 'rtmp://fcs21-1.somewebsite.com/reflect/2996910732;0', 

是這片:

rtmp://fcs21-1.somewebsite.com/reflect/2996910732 

什麼我的正則表達式失蹤?

+0

你是什麼數據_really_刮? .NET有一些_amazing_ HTML處理庫,比如CsQuery,它可以從HTML中獲取屬性,而且速度非常快 - 你很少真正需要RegEx –

回答

4

您的角色等級 - [*]僅匹配*,量詞爲+,它匹配1個或多個*,沒有別的。顯然它不符合你的字符串。

我想你的意思是使用.*代替它,它匹配任何字符0次或多次出現,但是\n

試着改變你的正則表達式:

"turbo: '(rtmp://.*);0',$" 

,甚至更好,因爲你的文字,並要提取什麼,你可以簡單地使用:

"turbo: '([^;]*);0',$ 
1

[*]比賽只*。要匹配任何字符,請選擇.。 (再

(實際上,.無法匹配換行符如果可能會出現一個新行,喜歡的東西的(.|\n)的效果 - 注意,反斜線將需要進行轉義)

1

試試這個:。

Match match = Regex.Match(line, @"^turbo: '(rtmp://[^;]+);0',$", RegexOptions.IgnoreCase); 

這將考慮與^符號的字符串的開始,並且匹配選擇將匹配任何不是一個;一路攀升到實際;