國內最大的酷站演示中心!
參考了一些文章,整理了一下,大家可以直接拿去用吧,其實自從有了freetextbox這樣的東東出現,ubb已經漸漸淡出江湖了。
using system;
using system.text;
using system.text.regularexpressions;
namespace test.com
{
/// <summary>
/// 功能:ubb代碼
/// 作者:rexsp
/// 日期:2004-4-6
/// </summary>
public class ubb
{
#region 構造函數
public ubb()
{
//
// todo: 在此處添加構造函數邏輯
//
}
#endregion
#region 公共靜態方法
/// <summary>
/// ubb代碼處理函數
/// </summary>
/// <param name="sdetail">輸入字符串</param>
/// <returns>輸出字符串</returns>
public static string ubbtohtml(string sdetail)
{
regex r;
match m;
#region 處理空格
sdetail = sdetail.replace(" "," ");
#endregion
#region html標記符
sdetail = sdetail.replace("<","<");
sdetail = sdetail.replace(">",">");
#endregion
#region 處[b][/b]標記
r = new regex(@"(/[b/])([ /s/t]*?)(/[//b/])",regexoptions.ignorecase);
for (m = r.match(sdetail); m.success; m = m.nextmatch())
{
sdetail = sdetail.replace(m.groups[0].tostring(),"<b>" + m.groups[2].tostring() + "</b>");
}
#endregion
#region 處[i][/i]標記
r = new regex(@"(/[i/])([ /s/t]*?)(/[//i/])",regexoptions.ignorecase);
for (m = r.match(sdetail); m.success; m = m.nextmatch())
{
sdetail = sdetail.replace(m.groups[0].tostring(),"<i>" + m.groups[2].tostring() + "</i>");
}
#endregion
#region 處[u][/u]標記
r = new regex(@"(/[u/])([ /s/t]*?)(/[//u/])",regexoptions.ignorecase);
for (m = r.match(sdetail); m.success; m = m.nextmatch())
{
sdetail = sdetail.replace(m.groups[0].tostring(),"<u>" + m.groups[2].tostring() + "</u>");
}
#endregion
#region 處[p][/p]標記
//處[p][/p]標記
r = new regex(@"((/r/n)*/[p/])(.*?)((/r/n)*/[//p/])",regexoptions.ignorecase|regexoptions.singleline);
for (m = r.match(sdetail); m.success; m = m.nextmatch())
{
sdetail = sdetail.replace(m.groups[0].tostring(),"<p class=/"pstyle/">" + m.groups[3].tostring() + "</p>");
}
#endregion
#region 處[sup][/sup]標記
//處[sup][/sup]標記
r = new regex(@"(/[sup/])([ /s/t]*?)(/[//sup/])",regexoptions.ignorecase);
for (m = r.match(sdetail); m.success; m = m.nextmatch())
{
sdetail = sdetail.replace(m.groups[0].tostring(),"<sup>" + m.groups[2].tostring() + "</sup>");
}
#endregion
#region 處[sub][/sub]標記
//處[sub][/sub]標記
r = new regex(@"(/[sub/])([ /s/t]*?)(/[//sub/])",regexoptions.ignorecase);
for (m = r.match(sdetail); m.success; m = m.nextmatch())
{
sdetail = sdetail.replace(m.groups[0].tostring(),"<sub>" + m.groups[2].tostring() + "</sub>");
}
#endregion
#region 處[url][/url]標記
//處[url][/url]標記
r = new regex(@"(/[url/])([ /s/t]*?)(/[//url/])",regexoptions.ignorecase);
for (m = r.match(sdetail); m.success; m = m.nextmatch())
{
sdetail = sdetail.replace(m.groups[0].tostring(),
"<a href=/"" + m.groups[2].tostring() + "/" target=/"_blank/"><img border=0 src=http://www.163design.net/"images/url.gif/">" +
m.groups[2].tostring() + "</a>");
}
#endregion
#region 處[url=xxx][/url]標記
//處[url=xxx][/url]標記
r = new regex(@"(/[url=([ /s/t]+)/])([ /s/t]*?)(/[//url/])",regexoptions.ignorecase);
for (m = r.match(sdetail); m.success; m = m.nextmatch())
{
sdetail = sdetail.replace(m.groups[0].tostring(),
"<a href=/"" + m.groups[2].tostring() + "/" target=/"_blank/"><img border=0 src=http://www.163design.net/"images/url.gif/">" +
m.groups[3].tostring() + "</a>");
}
#endregion
#region 處[email][/email]標記
//處[email][/email]標記
r = new regex(@"(/[email/])([ /s/t]*?)(/[//email/])",regexoptions.ignorecase);
for (m = r.match(sdetail); m.success; m = m.nextmatch())
{
sdetail = sdetail.replace(m.groups[0].tostring(),
"<a href=/"mailto:" + m.groups[2].tostring() + "/" target=/"_blank/"><img border=0 src=http://www.163design.net/"images/email.gif/">" +
m.groups[2].tostring() + "</a>");
}
#endregion
#region 處[email=xxx][/email]標記
//處[email=xxx][/email]標記
r = new regex(@"(/[email=([ /s/t]+)/])([ /s/t]*?)(/[//email/])",regexoptions.ignorecase);
for (m = r.match(sdetail); m.success; m = m.nextmatch())
{
sdetail = sdetail.replace(m.groups[0].tostring(),
"<a href=/"mailto:" + m.groups[2].tostring() + "/" target=/"_blank/"><img border=0 src=http://www.163design.net/"images/email.gif/">" +
m.groups[3].tostring() + "</a>");
}
#endregion
#region 處[size=x][/size]標記
//處[size=x][/size]標記
r = new regex(@"(/[size=([1-7])/])([ /s/t]*?)(/[//size/])",regexoptions.ignorecase);
for (m = r.match(sdetail); m.success; m = m.nextmatch())
{
sdetail = sdetail.replace(m.groups[0].tostring(),
"<font size=" + m.groups[2].tostring() + ">" +
m.groups[3].tostring() + "</font>");
}
#endregion
#region 處[color=x][/color]標記
//處[color=x][/color]標記
r = new regex(@"(/[color=([/s]+)/])([ /s/t]*?)(/[//color/])",regexoptions.ignorecase);
for (m = r.match(sdetail); m.success; m = m.nextmatch())
{
sdetail = sdetail.replace(m.groups[0].tostring(),
"<font color=" + m.groups[2].tostring() + ">" +
m.groups[3].tostring() + "</font>");
}
#endregion
#region 處[font=x][/font]標記
//處[font=x][/font]標記
r = new regex(@"(/[font=([/s]+)/])([ /s/t]*?)(/[//font/])",regexoptions.ignorecase);
for (m = r.match(sdetail); m.success; m = m.nextmatch())
{
sdetail = sdetail.replace(m.groups[0].tostring(),
"<font face=" + m.groups[2].tostring() + ">" +
m.groups[3].tostring() + "</font>");
}
#endregion
#region 處理圖片鏈接
//處理圖片鏈接
r = new regex("//[picture//](//d+?)//[///picture//]",regexoptions.ignorecase);
for (m = r.match(sdetail); m.success; m = m.nextmatch())
{
sdetail = sdetail.replace(m.groups[0].tostring(),
"<a href=/"showimage.aspx?type=all&action=forumimage&imageid=" + m.groups[1].tostring() +
"/" target=/"_blank/"><img border=0 title=/"點擊打開新窗口查看/" src=/"showimage.aspx?action=forumimage&imageid=" + m.groups[1].tostring() +
"/"></a>");
}
#endregion
#region 處理[align=x][/align]
//處理[align=x][/align]
r = new regex(@"(/[align=([/s]+)/])([ /s/t]*?)(/[//align/])",regexoptions.ignorecase);
for (m = r.match(sdetail); m.success; m = m.nextmatch())
{
sdetail = sdetail.replace(m.groups[0].tostring(),
"<p align=" + m.groups[2].tostring() + ">" +
m.groups[3].tostring() + "</p>");
}
#endregion
#region 處[h=x][/h]標記
//處[h=x][/h]標記
r = new regex(@"(/[h=([1-6])/])([ /s/t]*?)(/[//h/])",regexoptions.ignorecase);
for (m = r.match(sdetail); m.success; m = m.nextmatch())
{
sdetail = sdetail.replace(m.groups[0].tostring(),
"<h" + m.groups[2].tostring() + ">" +
m.groups[3].tostring() + "</h" + m.groups[2].tostring() + ">");
}
#endregion
#region 處理[list=x][*][/list]
//處理[list=x][*][/list]
r = new regex(@"(/[list(=(a|a|i|i| ))?/]([ /s/t]*)/r/n)((/[/*/]([ /s/t]*/r/n))*?)(/[//list/])",regexoptions.ignorecase);
for (m = r.match(sdetail); m.success; m = m.nextmatch())
{
string strli = m.groups[5].tostring();
regex rli = new regex(@"/[/*/]([ /s/t]*/r/n?)",regexoptions.ignorecase);
match mli;
for (mli = rli.match(strli); mli.success; mli = mli.nextmatch())
{
strli = strli.replace(mli.groups[0].tostring(),"<li>" + mli.groups[1]);
}
sdetail = sdetail.replace(m.groups[0].tostring(),
"<ul type=/"" + m.groups[3].tostring() + "/"><b>" + m.groups[4].tostring() + "</b>" +
strli + "</ul>");
}
#endregion
#region 處理換行
//處理換行,在每個新行的前面添加兩個全角空格
r = new regex(@"(/r/n(( )| )+)(?<正文>/s+)",regexoptions.ignorecase);
for (m = r.match(sdetail); m.success; m = m.nextmatch())
{
sdetail = sdetail.replace(m.groups[0].tostring(),"<br> " + m.groups["正文"].tostring());
}
//處理換行,在每個新行的前面添加兩個全角空格
sdetail = sdetail.replace("/r/n","<br>");
#endregion
return sdetail;
}
#endregion
}
}