UBB(c#完整版)(我的小毛驴)(2005年)

最近我又开始用c#做论坛,在网上找了一下,虽然也有关于ubb(c#)的转换代码,可是同样都不全面,我在这里补充了一下,拿出来和大家共享。
有什么问题到我个人的论坛[url=http://www.hushiyu.com]www.hushiyu.com[/url]来交流,随时欢迎。

using System;
using System.Text;
using System.Text.RegularExpressions;

namespace myluntan
{
///

1<summary>   
2/// UBB 的摘要说明。   
3/// </summary>

public class UBB
{
public UBB()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

#region 公共静态方法
///

1<summary>   
2/// UBB代码处理函数   
3/// </summary>

///

1<param name="sDetail"/>

输入字符串
///

1<returns>输出字符串</returns>

public string UBBToHTML(string sDetail)
{
Regex r;
Match m;
#region 处理空格
sDetail = sDetail.Replace(" "," ");
#endregion
#region 处理单引号
sDetail = sDetail.Replace("'","’");
#endregion
#region 处理双引号
sDetail = sDetail.Replace(""",""");
#endregion
#region html标记符
sDetail = sDetail.Replace("<","<");
sDetail = sDetail.Replace(">",">");

#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(),"

1<br/>

" + m.Groups["正文"].ToString());
}
//处理换行,在每个新行的前面添加两个全角空格
sDetail = sDetail.Replace("\r\n","

1<br/>

");
#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(),"

1<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(),"

1<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(),"

1<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(),"

1<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(),"

1<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(),"

1<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(),
"

1<a "\"="" +="" href='\""' m.groups[2].tostring()="" target='\"_blank\"'>" +   
2m.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(),
"

1<a "\"="" +="" href='\""' m.groups[2].tostring()="" target='\"_blank\"'>" +   
2m.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(),
"

1<a "\"="" +="" href='\"mailto:"' m.groups[2].tostring()="" target='\"_blank\"'>" +   
2m.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(),
"

1<a "\"="" +="" href='\"mailto:"' m.groups[2].tostring()="" target='\"_blank\"'>" +   
2m.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(),
"

1<font size=" + m.Groups[2].ToString() + ">" +   
2m.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(),
"

1<font color=" + m.Groups[2].ToString() + ">" +   
2m.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(),
"

1<font face=" + m.Groups[2].ToString() + ">" +   
2m.Groups[3].ToString() + "</font>

");
}
#endregion
#region 处理图片链接
//处理图片链接
r = new Regex(" \\picture\\\\[\/picture\\]",RegexOptions.IgnoreCase );
for (m = r.Match(sDetail); m.Success; m = m.NextMatch())
{
sDetail = sDetail.Replace(m.Groups[0].ToString(),
"

1<a "\"="" +="" href='\"ShowImage.aspx?Type=ALL&amp;Action=forumImage&amp;ImageID="' m.groups[1].tostring()="" target='\"_blank\"'><img "\"="" +="" border="0" m.groups[1].tostring()="" src='\"ShowImage.aspx?Action=forumImage&amp;ImageID="' title='\"点击打开新窗口查看\"'/></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(),
"

1<p align=" + m.Groups[2].ToString() + ">" +   
2m.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(),
"

1<h" "="" +="" m.groups[2].tostring()="">" +   
2m.Groups[3].ToString() + "</h">

");
}
#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(),"

  1<li>" + mLI.Groups[1]);   
  2}   
  3sDetail = sDetail.Replace(m.Groups[0].ToString(),   
  4"<ul "\"="" +="" m.groups[3].tostring()="" type='\""'><b>" + m.Groups[4].ToString() + "</b>" +   
  5strLI + "</ul>");   
  6} 
  7
  8#endregion   
  9#region 处[SHADOW=x][/SHADOW]标记   
 10//处[SHADOW=x][/SHADOW]标记   
 11r = new Regex(@"(\\[SHADOW=)(\d*?),(#*\w*?),(\d*?)\\]([\S\t]*?)(\\[\/SHADOW\\])",RegexOptions.IgnoreCase);   
 12for (m = r.Match(sDetail); m.Success; m = m.NextMatch())   
 13{   
 14sDetail = sDetail.Replace(m.Groups[0].ToString(),   
 15"<table ",="" )="" +="" m.groups[3].tostring()="" strength=" + m.Groups[4].ToString() + " style='FILTER:SHADOW(COLOR="' width=" + m.Groups[2].ToString() + ">" +   
 16m.Groups[5].ToString() + "</table>");   
 17}   
 18#endregion   
 19#region 处[glow=x][/glow]标记   
 20//处[glow=x][/glow]标记   
 21r = new Regex(@"(\\[glow=)(\d*?),(#*\w*?),(\d*?)\\]([\S\t]*?)(\\[\/glow\\])",RegexOptions.IgnoreCase);   
 22for (m = r.Match(sDetail); m.Success; m = m.NextMatch())   
 23{   
 24sDetail = sDetail.Replace(m.Groups[0].ToString(),   
 25"<table ",="" )="" +="" m.groups[3].tostring()="" strength=" + m.Groups[4].ToString() + " style='FILTER:GLOW(COLOR="' width=" + m.Groups[2].ToString() + ">" +   
 26m.Groups[5].ToString() + "</table>");   
 27}   
 28#endregion   
 29#region 处[center][/center]标记   
 30r = new Regex(@"(\\[center\\])([ \S\t]*?)(\\[\/center\\])",RegexOptions.IgnoreCase);   
 31for (m = r.Match(sDetail); m.Success; m = m.NextMatch())   
 32{   
 33sDetail = sDetail.Replace(m.Groups[0].ToString(),"<center>" + m.Groups[2].ToString() + "</center>");   
 34}   
 35#endregion   
 36#region 处[IMG][/IMG]标记   
 37r = new Regex(@"(\\[IMG\\])(http|https|ftp):\/\/([ \S\t]*?)(\\[\/IMG\\])",RegexOptions.IgnoreCase);   
 38for (m = r.Match(sDetail); m.Success; m = m.NextMatch())   
 39{   
 40sDetail = sDetail.Replace(m.Groups[0].ToString(),"<br/><a "="" +="" :="" href=" + m.Groups[2].ToString() + " m.groups[3].tostring()="" onfocus="this.blur()" target="_blank"><img "="" +="" :="" alt="按此在新窗口浏览图片" border="0" m.groups[3].tostring()="" onload="javascript:if(screen.width-333&lt;this.width)this.width=screen.width-333" src=" + m.Groups[2].ToString() + "/></a>");   
 41}   
 42#endregion   
 43#region 处[em]标记   
 44r = new Regex(@"(\\[em([\S\t]*?)\\])",RegexOptions.IgnoreCase);   
 45for (m = r.Match(sDetail); m.Success; m = m.NextMatch())   
 46{   
 47sDetail = sDetail.Replace(m.Groups[0].ToString(),"<img ".gif="" +="" align="middle" border="0" m.groups[2].tostring()="" src='pic/em"'/>");   
 48}   
 49#endregion   
 50#region 处[flash=x][/flash]标记   
 51//处[mp=x][/mp]标记   
 52r = new Regex(@"(\\[flash=)(\d*?),(\d*?)\\]([\S\t]*?)(\\[\/flash\\])",RegexOptions.IgnoreCase);   
 53for (m = r.Match(sDetail); m.Success; m = m.NextMatch())   
 54{   
 55sDetail = sDetail.Replace(m.Groups[0].ToString(),   
 56"<a href=" + m.Groups[4].ToString() + " target="_blank"><img alt="点击开新窗口欣赏该FLASH动画!" border="0" src="pic/swf.gif"/> [全屏欣赏]</a><br/><br/><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" height=" + m.Groups[3].ToString() + " width=" + m.Groups[2].ToString() + "><param name="movie" value=" + m.Groups[4].ToString() + "/><param name="quality" value="high"/><param name="menu" value="false"/><embed height=" + m.Groups[3].ToString() + " menu="false" pluginspage="http://www.macromedia.com/go/getflashplayer" quality="high" src=" + m.Groups[4].ToString() + " type="application/x-shockwave-flash" width=" + m.Groups[2].ToString() + "/>" + m.Groups[4].ToString() + "</object>");   
 57}   
 58#endregion   
 59#region 处[dir=x][/dir]标记   
 60//处[dir=x][/dir]标记   
 61r = new Regex(@"(\\[dir=)(\d*?),(\d*?)\\]([\S\t]*?)(\\[\/dir\\])",RegexOptions.IgnoreCase);   
 62for (m = r.Match(sDetail); m.Success; m = m.NextMatch())   
 63{   
 64sDetail = sDetail.Replace(m.Groups[0].ToString(),   
 65"<object classid="clsid:166B1BCA-3F9C-11CF-8075-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=7,0,2,0" height=" + m.Groups[3].ToString() + " width=" + m.Groups[2].ToString() + "><param name="src" value=" + m.Groups[4].ToString() + "/><embed height=" + m.Groups[3].ToString() + " pluginspage="http://www.macromedia.com/shockwave/download/" src=" + m.Groups[4].ToString() + " width=" + m.Groups[2].ToString() + "/></object>");   
 66}   
 67#endregion   
 68#region 处[rm=x][/rm]标记   
 69//处[rm=x][/rm]标记   
 70r = new Regex(@"(\\[rm=)(\d*?),(\d*?)\\]([\S\t]*?)(\\[\/rm\\])",RegexOptions.IgnoreCase);   
 71for (m = r.Match(sDetail); m.Success; m = m.NextMatch())   
 72{   
 73sDetail = sDetail.Replace(m.Groups[0].ToString(),   
 74"<object class="OBJECT" classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" height=" + m.Groups[3].ToString() + " id="RAOCX" width=" + m.Groups[2].ToString() + "><param name="SRC" value=" + m.Groups[4].ToString() + "/><param name="CONSOLE" value="Clip1"/><param name="CONTROLS" value="imagewindow"/><param name="AUTOSTART" value="true"/></object><br/><object classid="CLSID:CFCDAA03-8BE4-11CF-B84B-0020AFBBCCFA" height="32" id="video2" width=" + m.Groups[2].ToString() + "><param name="SRC" value=" + m.Groups[4].ToString() + "/><param name="AUTOSTART" value="-1"/><param name="CONTROLS" value="controlpanel"/><param name="CONSOLE" value="Clip1"/></object>");   
 75}   
 76#endregion   
 77#region 处[mp=x][/mp]标记   
 78//处[mp=x][/mp]标记   
 79r = new Regex(@"(\\[mp=)(\d*?),(\d*?)\\]([\S\t]*?)(\\[\/mp\\])",RegexOptions.IgnoreCase);   
 80for (m = r.Match(sDetail); m.Success; m = m.NextMatch())   
 81{   
 82sDetail = sDetail.Replace(m.Groups[0].ToString(),   
 83"<object align="middle" class="OBJECT" classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95" height=" + m.Groups[3].ToString() + " id="MediaPlayer" width=" + m.Groups[2].ToString() + "><param name="ShowStatusBar" value="-1"/><param name="Filename" value=" + m.Groups[4].ToString() + "/><embed codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701" flename="mp" height=" + m.Groups[3].ToString() + " src=" + m.Groups[4].ToString() + " type="application/x-oleobject" width=" + m.Groups[2].ToString() + "/></object>");   
 84}   
 85#endregion   
 86#region 处[qt=x][/qt]标记   
 87//处[qt=x][/qt]标记   
 88r = new Regex(@"(\\[qt=)(\d*?),(\d*?)\\]([\S\t]*?)(\\[\/qt\\])",RegexOptions.IgnoreCase);   
 89for (m = r.Match(sDetail); m.Success; m = m.NextMatch())   
 90{   
 91sDetail = sDetail.Replace(m.Groups[0].ToString(),   
 92"<embed autoplay="true" bgcolor="#000000" cache="false" controller="true" height=" + m.Groups[3].ToString() + " kioskmode="false" loop="false" playeveryframe="false" pluginspage="http://www.apple.com/quicktime/" scale="TOFIT" src=" + m.Groups[4].ToString() + " targetcache="false" width=" + m.Groups[2].ToString() + "/>");   
 93}   
 94#endregion   
 95#region 处[QUOTE][/QUOTE]标记   
 96r = new Regex(@"(\\[QUOTE\\])([ \S\t]*?)(\\[\/QUOTE\\])",RegexOptions.IgnoreCase);   
 97for (m = r.Match(sDetail); m.Success; m = m.NextMatch())   
 98{   
 99sDetail = sDetail.Replace(m.Groups[0].ToString(),"<table 9pt="" align="center" bgcolor="#F2F8FF" border="1" bordercolor="#000000" cellpadding="0" cellspacing="0" style="FONT-SIZE:" width="94%"><tr><td><table border="0" cellpadding="5" cellspacing="1" width="100%"><tr><td>" + m.Groups[2].ToString() + "</td></tr></table></td></tr></table><br/>");   
100}   
101#endregion   
102#region 处[move][/move]标记   
103r = new Regex(@"(\\[move\\])([ \S\t]*?)(\\[\/move\\])",RegexOptions.IgnoreCase);   
104for (m = r.Match(sDetail); m.Success; m = m.NextMatch())   
105{   
106sDetail = sDetail.Replace(m.Groups[0].ToString(),"<marquee scrollamount="3">" + m.Groups[2].ToString() + "</marquee>");   
107}   
108#endregion   
109#region 处[FLY][/FLY]标记   
110r = new Regex(@"(\\[FLY\\])([ \S\t]*?)(\\[\/FLY\\])",RegexOptions.IgnoreCase);   
111for (m = r.Match(sDetail); m.Success; m = m.NextMatch())   
112{   
113sDetail = sDetail.Replace(m.Groups[0].ToString(),"<marquee behavior="alternate" scrollamount="3" width="80%">" + m.Groups[2].ToString() + "</marquee>");   
114}   
115#endregion   
116#region 处[image][/image]标记   
117//处[image][/image]标记   
118r = new Regex(@"(\\[image\\])([ \S\t]*?)(\\[\/image\\])",RegexOptions.IgnoreCase);   
119for (m = r.Match(sDetail); m.Success; m = m.NextMatch())   
120{   
121sDetail = sDetail.Replace(m.Groups[0].ToString(),   
122"<img "\"="" +="" align="middle" border="0" m.groups[2].tostring()="" src='\""'/><br/>");   
123}   
124#endregion 
125
126return sDetail;   
127}   
128#endregion   
129}   
130}</li>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus