日期:2014-05-20  浏览次数:20802 次

求一个关于UBB中URL的正则表达式(C#)写法
问题:

假设有一段文字如下:

http://www.csdn.net
[url]http://www.csdn.net[/url]
[url=http://www.csdn.net]CSDN[/url]

问:如何用C#中的正则表达式使上面的文字转为以下形式:

<a   href= "http://www.csdn.net "> http://www.csdn.net </a>
<a   href= "http://www.csdn.net "> http://www.csdn.net </a>
<a   href= "http://www.csdn.net "> CDSN </a>

注意:不是一行一行的挨个转换出来哦,要一次性的转换出来,就是要可以提供一个函数类似:string   UbbParse(string   str){}

------解决方案--------------------
你去这里看看吧,正则的各个符号的规则,http://community.csdn.net/Expert/TopicView1.asp?id=5357558
你可以分开一两层来做,用Groups来取值,想得到你的结果再用Replace或是直接用字符相加就可以了。
------解决方案--------------------
http://www.csdn.net
[url]http://www.csdn.net[/url]
http://www.csdn.net
[url=http://www.csdn.net]CSDN[/url]
[url]http://www.csdn.net[/url][url]http://www.csdn.net[/url]

<a href= "http://www.csdn.net "> http://www.csdn.net </a>
<a href= "http://www.csdn.net "> http://www.csdn.net </a>
<a href= "http://www.csdn.net "> http://www.csdn.net </a>
<a href= "http://www.csdn.net "> CSDN </a>
<a href= "http://www.csdn.net "> http://www.csdn.net </a> <a href= "http://www.csdn.net "> http://www.csdn.net </a>
----------------------
//逆向思维,先把[url../url]之中的连接处理掉,再回头处理之外的连接
//你可以把每一步的结果打印处理就知道我的思路了
//参考如下代码
string S =
@ "http://www.csdn.net " + "\r\n " +
@ "[url]http://www.csdn.net[/url] " + "\r\n " +
@ "http://www.csdn.net " + "\r\n " +
@ "[url=http://www.csdn.net]CSDN[/url] " + "\r\n " +
@ "[url]http://www.csdn.net[/url][url]http://www.csdn.net[/url] " + "\r\n ";

S = Regex.Replace(S, @ "\[url\](http://[^\[]*)\[\/url\] ", "[url=$1]$1[/url] ");
S = Regex.Replace(S, @ "\[url=http://([^\[]*)] ", "[url=\u0001$1] ");
S = Regex.Replace(S, @ "([url=[^\]]*])http://([^\[]*\[\/url\]) ", "$1\u0001$2 ");
S = Regex.Replace(S, @ "([\s]*)(http://[\S]+) ", "$1[url=$2]$2[/url] ");
S = Regex.Replace(S, @ "\[url=([^\]]*)\] ", @ " <a href= " "$1 " "> ");
S = S.Replace( "[/url] ", " </a> ");
S = S.Replace( "\u0001 ", "http:// ");
textBox1.Text = S;