2012-09-24 154 views
0

我正在嘗試使用Regex.Replace來創建超鏈接。我想這樣做,用戶可以點擊我創建的按鈕並創建產品鏈接。這種方式,如果URL由於某種原因改變,我不會必須改變數據輸入端的邏輯。用戶將提交文本正文,並且我將使用如下格式:Regex.Replace創建超鏈接C#

"[!product:123456:Click Me!]" 

其中p代表產品。點擊我是鏈接上顯示的文字。 123456是標識符。鏈接應該是這樣的:

<a href="www.mywebsite.com/product/123456">Click Me</a> 

到目前爲止,我有這樣的:

var output = Regex.Replace(model.Body, @"\[!([^!]*)\!]", "<a href='http://www.mywebsite.com/$1'> link </a>"); 

將返回:

http://www.mywebsite.com/p:165411:Click Me 

有什麼辦法,我可以做一個正則表達式,讓我解析[!和!]來分離出由「:」分隔的數據?

這裏是我的想法:

var output = Regex.Replace(model.Body, SOME REGEX HERE, "<a href='http://www.mywebsite.com/$1/$2'> $3 </a>"); 

希望這是什麼,我試圖做的足夠信息。任何幫助將不勝感激。

+0

剛剛發佈工作的例子 – CaffGeek

回答

2

這個正則表達式怎麼樣?

\[!(.*):(.*):(.*)!\] 

在C#是

using System; 
using System.Text.RegularExpressions; 

namespace ConsoleApplication2 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var text = "[!product:123456:Click Me!]"; 
      var regex = new Regex("\\[!(.*):(.*):(.*)!\\]", RegexOptions.IgnoreCase); 

      var result = regex.Replace(text, "<a href='http://www.mywebsite.com/$1/$2'> $3 </a>"); 
      Console.WriteLine(result); 
      Console.ReadKey(); 
     } 
    } 
} 
+1

神奇!非常感謝你,它像一個魅力。 – JCisar

+0

好工作的人..我是爲了這個孩子,但你的是簡單而迷人的 (!)((?:[az] [az] +))(:)(\ d +)(:)((?:[ ():(az)[az] +))(!) – pordi

+0

@JCisar,很高興它的工作! – CaffGeek