zoukankan
html css js c++ java
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(
"
"
,
"
"
);
#endregion
html标记符
#region
html标记符
sDetail
=
sDetail.Replace(
"
<
"
,
"
<
"
);
sDetail
=
sDetail.Replace(
"
>
"
,
"
>
"
);
#endregion
处[b][/b]标记
#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
处[i][/i]标记
#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
处[u][/u]标记
#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
处[p][/p]标记
#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
处[sup][/sup]标记
#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
处[sub][/sub]标记
#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
处
标记
//
处
标记
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
处[url=xxx][/url]标记
#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
处[email][/email]标记
#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
处[email=xxx][/email]标记
#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
处[size=x][/size]标记
#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
处[color=x][/color]标记
#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
处[font=x][/font]标记
#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
处理[align=x][/align]
#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
处[H=x][/H]标记
#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
处理[list=x][*][/list]
#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
}
}
查看全文
相关阅读:
直接拿来用!最火的Android开源项目(二)
直接拿来用!最火的Android开源项目(一)
Android应用经典主界面框架之二:仿网易新闻客户端、CSDN 客户端 (Fragment ViewPager)
Android应用经典主界面框架之一:仿QQ (使用Fragment)
Android Studio导入第三方类库的方法
Socket编程总结—Android手机服务器与多个Android手机客户端之间的通信(非阻塞)
Android 客户端与服务器交互方式
消息模式Toast.makeText的几种常见用法
在eclipse中将android项目生成apk并且给apk签名
Android Studio 1.0.1 + Genymotion安卓模拟器打造高效安卓开发环境
原文地址:https://www.cnblogs.com/LCX/p/110246.html
最新文章
centos7 安装 pycharm2018 并添加环境变量至桌面
软件的定义及分类
postman对登陆进行压力测试的方法
postman做压力测试
postman的关联,即如何在请求中引用上次请求返回的值
postman设置环境变量、全局变量
postman使用方法详解
接口测试用例和接口测试模板
接口测试工具有哪些
如何设计接口测试用例
热门文章
542. 01 Matrix
109. Convert Sorted List to Binary Search Tree
200. Number of Islands
491. Increasing Subsequences
394. Decode String
547. Friend Circles
257. Binary Tree Paths
166. Fraction to Recurring Decimal
355. Design Twitter
138. Copy List with Random Pointer
Copyright © 2011-2022 走看看