用JAVA实现UBB代码
【打印文章】
一、什么是UBB
UBB代码是HTML的一个变种,是Ultimate Bulletin Board (国外一个BBS程序,国内也有不少地方使用这个程序)采用的一种特殊Tag。UBB代码很简单,功能很少,但是其Tag语法检查实现非常容易,所以在很多论坛中都得到了应用。
UBB代码一般是以这样的格式出现,“[b]这是粗体[/b]”,表示一段粗体文字,其它常用的还有“[url]www.code-maker.com[/url]”、“[email]sonymusic china.com[/email]”,分别表示一个超链接和一个E-mail地址的链接。具体的例子,请参考ChinaAsp论坛(http://www.chinaasp.com/sqlbbs/)。
二、用JAVA实现UBB代码
相信大家一定可以想到UBB代码的解析,其实就是将“[b][/b]”这样的格式转换成““”就可以了,但是怎么转换呢?答案是用正则表达式。利用上一期讲到的正则表达式类(sony.utils.Regex)中的eregi_replace替换方法,可以很轻松地做到。下面是一段示例。
String s="[b]这是粗体[/b]";
String result;
result = Regex.eregi_replace("\\[b\\](.+?)\\[\\/b\\]","“$1“", s);
System.out.println(result);
//打印结果是:
//“这是粗体“。
这么简单吗?是的,我们只需要将其它的UBB Tag作类似的替换就实现了UBB代码的解析了。
三、sony.utils.filter.Ubb类的源码
在这个类中,只存在一个parse方法,而且非常短小,因为我将所有的UBB Tag和对应的Html Tag放到了一个二维数组中了,在parse方法中所做的,只是遍历这个数组,做正则表达式的替换就可以了。这样在需要扩充UBB代码集时也会方便一些。
因为UBB代码是不分大小写的,所以这里使用了eregi_replace方法。
源程序(Ubb.java)
四、一个测试UBB代码的JAVA例子
源程序:
public static void main(java.lang.String[] args)
{
String ubbSource=
"[url href=www.china.com]www.china.com[/url][img]http://192.100.100.11/ug/images/quickpreview.gif[/img][i] 斜体 [/i][b][url]china.com[/Url]再来一段粗体[/b][email]boss_ch china.com[/email][hr][#ff0000]红色[/#]";
if (args.length > 0)
ubbSource= args[0];
System.out.println("输入的UBB 源代码:" + ubbSource);
System.out.println("转换后的Html 代码:" + parse(ubbSource));
}
五、UBB类在JSP程序中的使用
UBB通常是应用在网站中的,那么在JSP(一种建设网站的脚本语言,基于JAVA,在国外应用非常广泛,国内也有很多人在使用,见http://www.chinaasp.com/sqlbbs/ 中的JSP/EJB版面)中如何使用呢?其实JSP完全采用Java的语法,所以在看了下面的例子后,大家会发现和上一个例子中的使用方法几乎一样。
当然,在使用之前,需要将编译过的Ubb.class文件放到你的Web Server的WEB-INF/class/sony/utils/filter/目录下。
并且这里使用了另一个类sony.utils.filter.HtmlFilter,参见本期另一篇文章《用JAVA实现Html标签的过滤》。
六、结论
因为正则表达式的功能如此强大,以至于这个实现UBB代码的类只需要60行左右的代码,而且因为使用了数组来保存需要替换的UBB Tag和Html Tag,所以扩充起来非常方便,只需要在数组中增加几行就行了,主函数不需改动。
UBB代码是HTML的一个变种,是Ultimate Bulletin Board (国外一个BBS程序,国内也有不少地方使用这个程序)采用的一种特殊Tag。UBB代码很简单,功能很少,但是其Tag语法检查实现非常容易,所以在很多论坛中都得到了应用。
UBB代码一般是以这样的格式出现,“[b]这是粗体[/b]”,表示一段粗体文字,其它常用的还有“[url]www.code-maker.com[/url]”、“[email]sonymusic china.com[/email]”,分别表示一个超链接和一个E-mail地址的链接。具体的例子,请参考ChinaAsp论坛(http://www.chinaasp.com/sqlbbs/)。
二、用JAVA实现UBB代码
相信大家一定可以想到UBB代码的解析,其实就是将“[b][/b]”这样的格式转换成““”就可以了,但是怎么转换呢?答案是用正则表达式。利用上一期讲到的正则表达式类(sony.utils.Regex)中的eregi_replace替换方法,可以很轻松地做到。下面是一段示例。
String s="[b]这是粗体[/b]";
String result;
result = Regex.eregi_replace("\\[b\\](.+?)\\[\\/b\\]","“$1“", s);
System.out.println(result);
//打印结果是:
//“这是粗体“。
这么简单吗?是的,我们只需要将其它的UBB Tag作类似的替换就实现了UBB代码的解析了。
三、sony.utils.filter.Ubb类的源码
在这个类中,只存在一个parse方法,而且非常短小,因为我将所有的UBB Tag和对应的Html Tag放到了一个二维数组中了,在parse方法中所做的,只是遍历这个数组,做正则表达式的替换就可以了。这样在需要扩充UBB代码集时也会方便一些。
因为UBB代码是不分大小写的,所以这里使用了eregi_replace方法。
源程序(Ubb.java)
四、一个测试UBB代码的JAVA例子
源程序:
public static void main(java.lang.String[] args)
{
String ubbSource=
"[url href=www.china.com]www.china.com[/url][img]http://192.100.100.11/ug/images/quickpreview.gif[/img][i] 斜体 [/i][b][url]china.com[/Url]再来一段粗体[/b][email]boss_ch china.com[/email][hr][#ff0000]红色[/#]";
if (args.length > 0)
ubbSource= args[0];
System.out.println("输入的UBB 源代码:" + ubbSource);
System.out.println("转换后的Html 代码:" + parse(ubbSource));
}
五、UBB类在JSP程序中的使用
UBB通常是应用在网站中的,那么在JSP(一种建设网站的脚本语言,基于JAVA,在国外应用非常广泛,国内也有很多人在使用,见http://www.chinaasp.com/sqlbbs/ 中的JSP/EJB版面)中如何使用呢?其实JSP完全采用Java的语法,所以在看了下面的例子后,大家会发现和上一个例子中的使用方法几乎一样。
当然,在使用之前,需要将编译过的Ubb.class文件放到你的Web Server的WEB-INF/class/sony/utils/filter/目录下。
并且这里使用了另一个类sony.utils.filter.HtmlFilter,参见本期另一篇文章《用JAVA实现Html标签的过滤》。
六、结论
因为正则表达式的功能如此强大,以至于这个实现UBB代码的类只需要60行左右的代码,而且因为使用了数组来保存需要替换的UBB Tag和Html Tag,所以扩充起来非常方便,只需要在数组中增加几行就行了,主函数不需改动。
本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( Pfan.cn )
【编程爱好者论坛】