2014-11-04 32 views
0

想象一下,我有一個正則表達式應該捕獲一個HTML鏈接,並用另一個鏈接替換它。正則表達式用指定組和其他所有內容替換

的正則表達式將是這個樣子:

<a.+?href="(?'url'.+?)".*?> 

它會匹配這樣的HTML標籤:

<a href="http://www.google.com"> 

或本:

<a target="_blank" href="#top"> 

如果我現在請

regex.Replace(new MatchEvaluator(ReplaceUrl)) 

我會得到一個參數Match並在指定的組內。

但Match.Groups集合不僅包含3個項目。

我如何把整個比賽重新走到一起,這樣的結果將是

<a href="http://www.EvulRulz.devil"> 

或者我真的需要把一切到一個組呢?

感謝Jonesy(見下面我終於掌握了組集合中的指標含義,

所有未命名的組僅編號從1開始,他們出現在相同的順序,他們在正則表達式模式

所以我的更換方法如下所示(基於未修改的正則表達式,我會真正適應):

private static String ReplaceUrl(Match match) 
{ 
    return (match.Groups[1].Value + "http://www.EvulRulz.devil" + match.Groups[2].Value); 
} 

回答

1

使用捕捉組來獲取標籤的其他部分也:

(<a.+?href=")([^"]+)("[^>]*>)

再插那些回,在更換:

var pattern = @"(<a.+?href="")([^""]+)(""[^>]*>)"; 
var str = @"<a target=""_blank"" href=""#top"">"; 

var newUrl = "http://www.stackoverflow.com"; 
var newTag = Regex.Replace(str, pattern, "$1" + newUrl + "$3"); 

(我改變了你的基地正則表達式位)

+0

我堅持了我的MatchEvaluator超載,因爲在現實中,我需要做多一點,但現在我已經理解了組索引的含義。 所以,我的代碼看起來更像這樣: match.Groups [1] .Value +「EvulRulz.devil」+ match.Groups [3] .Value – 2014-11-04 20:54:26

相關問題