`
leonardleonard
  • 浏览: 820765 次
社区版块
存档分类
最新评论

C#写的UBB代码累

阅读更多
参考了一些文章,整理了一下,大家可以直接拿去用吧,其实自从有了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(" ","&nbsp;");
#endregion
#region html标记符
sDetail = sDetail.Replace("<","&lt;");
sDetail = sDetail.Replace(">","&gt;");
#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=\"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=\"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=\"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=\"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((&nbsp;)| )+)(?<正文>\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
}


 
分享到:
评论

相关推荐

    C#处理Ubb代码类

    C# 处理Ubb代码向html代码转换 辅助工具类 酌情修改

    C#的UBB代码

    C#的UBB代码,大家看一下

    C#UBB代码

    C#UBB代码...

    C#读写Influxdb代码例子

    标题中的"C#读写Influxdb代码例子"指的是使用C#编程语言与InfluxDB数据库进行交互的示例代码。InfluxDB是一个专为时序数据设计的高性能、开源数据库,常用于监控、日志记录和大数据分析。下面将详细阐述如何在C#中...

    C#写的搜索引擎代码

    本项目以"C#写的搜索引擎代码"为主题,展示了如何利用C#编程语言构建一个基础的网络爬虫,即“蜘蛛程序”。C#是一种面向对象的、现代化的编程语言,常用于开发Windows应用程序和Web服务,它具有丰富的类库和强大的...

    C#代码统计工具

    本文将详细介绍一个专为C#项目设计的代码统计工具,该工具简化了代码行数的计算过程。 标题中的“C#代码统计工具”是一个专门用于分析C#项目代码量的应用程序。它允许用户通过指定C#项目的根目录,快速获取项目中的...

    C#有效代码行数统计

    对于C#开发者来说,了解如何统计有效代码行数是十分重要的。本篇文章将深入探讨C#代码行数统计的概念、方法以及其在实际开发中的应用。 首先,我们需要明确“有效代码行”的定义。在C#中,有效代码行通常指的是能够...

    C#代码生成器

    《C#代码生成器详解与应用》 C#代码生成器是一种高效开发工具,它能够帮助程序员快速生成符合特定需求的C#源代码,极大地提高了编程效率和代码质量。在.NET框架下,C#作为主要的开发语言,其代码生成器的作用显得尤...

    c#绘图源代码

    【标题】"C#绘图源代码"涵盖了C#编程语言在图形绘制方面的应用,主要集中在使用C#的图形库和API进行图形界面的设计与实现。C#是一种面向对象的编程语言,它提供了丰富的功能来支持图形用户界面(GUI)的创建,包括...

    asp.net(c#) ubb处理类

    - `UbbCode` 类是处理UBB代码的核心类,包含了多个方法来处理不同的UBB标签和链接。 2. **`unhtml` 方法**: - 此方法用于对字符串进行HTML编码,防止XSS(跨站脚本攻击)。 - 使用 `Server.HtmlEncode` 对字符...

    西门子RFID读写C#代码

    西门子RFID读写C#代码涉及到的技术领域主要包括RFID(Radio Frequency Identification,射频识别)技术、C#编程语言以及与西门子设备的交互。RFID是一种非接触式的自动识别技术,通过无线射频信号来识别特定目标并...

    C# OCR 源代码

    **C# OCR 源代码详解** 在信息技术领域,光学字符识别(Optical Character Recognition,简称OCR)是一项关键的技术,它能将图像中的文本转换为机器可编辑的文本格式。在给定的“C# OCR 源代码”中,我们可以深入...

    用C#写的扫雷源代码

    用C#写的扫雷源代码,以及程序流程图、类结构图等文档

    C#写的仓库管理信息系统,有C#完整项目+源代码

    本项目的源代码是学习C#编程和系统设计的宝贵资源,通过对源代码的分析,开发者可以深入理解如何将理论知识应用于实际项目,掌握仓储系统的关键技术和设计思路。同时,对于想要扩展或定制功能的用户,源代码也提供了...

    C#调用C++代码完整实例

    在IT领域,跨语言通信是常见的需求,尤其是在.NET框架下的C#编程中,有时需要调用C++编写的原生代码来利用其高效性或利用已有的库。本实例将详细讲解如何使用C#调用C++代码,通过DLL动态链接库实现功能。 首先,...

    C#读写三菱PLC和西门子PLC数据程序(源代码)

    该项目包含了可以直接运行的C#示例代码,使得开发者能够轻松地实现PLC数据的读取和写入。 首先,C#是一种通用的、面向对象的编程语言,广泛应用于开发Windows桌面应用、Web应用以及游戏开发等领域。在工业自动化中...

    C#编写的深圳明华URF-R330读写器Demo M1卡读写程序代码示例

    C#非接触IC卡M1卡读写调试源代码,自己编写的明华URF-R330读写器 M1卡的读写,官方提供的demo很混乱,并且没有C#版本的,第一次测试调试都很难搞明白,我四处收集资料改写代码写出这个C#版的Demo,我这个是根据他们...

    C#写的一个狠酷的时钟,有C#完整项目+源代码

    标题中的"C#写的一个狠酷的时钟"指的是使用C#编程语言开发的一款独特且吸引人的数字时钟应用。C#是一种广泛应用于Windows平台、Web应用以及游戏开发的强大编程语言,由微软公司开发。它的面向对象特性、丰富的类库...

    js2c#-js转换c#代码

    "js2c#"工具正是一个旨在帮助开发者将JavaScript代码转换为C#代码的实用工具。这个工具的亮点在于它能够将JS代码编译成DLL或EXE文件,使得C#项目可以直接引用这些编译后的库,从而实现跨语言的代码复用。 首先,...

    C#写的杨辉三角代码

    C#写的杨辉三角,欢迎下载!!!!!!欢迎下载!!!!!!

Global site tag (gtag.js) - Google Analytics