正则表达式(18)——字符串替换案例:UBB翻译

为了防止用户用恶意代码留言,大部分论坛都不允许使用HTML语句做为回帖内容(或者进行了转义),但是这限制了用户的发挥,比如用户无法粘贴超链接、无法粘贴图片地址,无法把自己发送的文字进行加粗,改变字号。为了解决这个问题,人们设计出了UBB代码,它提供了有限的、无危害的功能,用户只要遵循代码规则就可以实现用户想要的功能。 UBB语法:http://baike.baidu.com/view/35.htm?fr=ala0_1_1

  • [URL=http://www.baidu.com]百度网[/URL]替换为<a href="http://www.baidu.com">百度网</a>。
  • [img]http://www.baidu.com/a.jpg[/img]→<img>。
  • [b]aaa[/b]→<b>aaa</b>
public static void main(String[] args)
{
	StringBuffer sb = new StringBuffer();
	sb.append("[URL]http://www.cownew.com[/URL]\n");
	sb.append("[IMG]http://www.cownew.com/pic.jpg[/IMG]\n");
	sb.append("[I]Open source![/I]\n");
	sb.append("[B]important![/B]\n");
	System.out.println(txUBB(sb.toString()));
}
private static String txUBB(String ubb)
{
	String html = ubb;
	html = replace("\\[URL\\](.+)\\[/URL\\]",html,"<A HREF=$1 TARGET=_blank>$1</A>");
	html = replace("\\[EMAIL\\](.+)\\[/EMAIL\\]",html,"<A HREF=mailto:$1>$1</A>");
	html = replace("\\[IMG\\](.+)\\[/IMG\\]",html,"<IMG SRC=$1>");
	html = replace("\\[I\\](.+)\\[/I\\]",html,"<i>$1</i>");
	html = replace("\\[B\\](.+)\\[/B\\]",html,"<b>$1</b>");
	return html;
}
private static String replace(String regEx, String ubb, String replacement)
{
	Pattern p = Pattern.compile(regEx);
	Matcher m = p.matcher(ubb);
	return m.replaceAll(replacement);
}

练习:开发UBB翻译器。实现 [B]、 [URL]就可以。提供Winform界面,输入UBB代码,转换为html内容的字符串,然后赋值给WebBrowser控件的DocumentText属性。

  • [b]fff[/b]→<b>fff</b>
  • [url=http://www.baidu.com]百度[/url]→<a href="http://www.baidu">百度</a>

多次Replace,每次处理一个替换。注意:[是元字符,需要转义。

测试文本:你好,我发现一个[b]新网站[/b],[b]大家[/b]来看呀[url=http://www.qq.com]秋秋[/a],另外一个有时间也可以看看[url=http://www.rupeng.com]如鹏[/url],还有[url=http://www.itcast.cn]传智播客[/url]。吼吼!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值