正则表达式将url转换为超链接

时间:2010-07-17 12:50:42

标签: c# .net regex bbcode

我用Google搜索了一些使用bbcode将网址转换为超链接的代码代码为:

// format the url tags: [url=www.website.com]my site[/url]
// becomes: <a href="www.website.com">my site</a>
exp = new Regex(@"\[url\=([^\]]+)\]([^\]]+)\[/url\]");
str = exp.Replace(str, "<a href=\"$1\">$2</a>");

// format the img tags: [img]www.website.com/img/image.jpeg[/img]
// becomes: <img src="www.website.com/img/image.jpeg" />
exp = new Regex(@"\[img\]([^\]]+)\[/img\]");
str = exp.Replace(str, "$1\" />");

我也想转换普通链接超链接。我已经搜索了更多内容并得到了这个:

exp = new Regex("(http://[^ ]+)");
str = exp.Replace(str, "<a href=\"$1\">$1</a>");

问题是,当我混合它们并执行第三个正则表达式时,前两个将被搞砸。因为它可能导致:

<img src="<a href='www.website.com/img/image.jpeg>www.website.com/img/image.jpeg</a>" />

如何在我的第三个正则表达式中指定他不能转换以'href =“'或'src =”'开头的字符串?

1 个答案:

答案 0 :(得分:1)

鉴于用户可能会给你带来有趣的标签组合,正则表达式很快变得很麻烦,很难用于解析标签。

BBCode本身就是一种语法,以编程方式解释语法的最佳方法是使用实​​际的解析器。

看看http://bbcode.codeplex.com/。我无法保证它的有效性,但他们已经在C#中为BBCode实现了一个解析器,它可能正在寻找你想要的东西。