2

bbcodeを使用してURLをハイパーリンクに変換するコードをグーグルで検索しました。コードは次のとおりです。

// 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>");

問題は、それらを混ぜて3番目の正規表現を実行すると、最初の2つが台無しになることです。結果として:

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

'href="'または'src="'で始まる文字列を変換できないことを3番目の正規表現で指定するにはどうすればよいですか?

4

1 に答える 1

1

ユーザーがあなたに投げかける可能性のあるタグの興味深い組み合わせを考えると、正規表現はすぐに面倒になり、タグの解析に使用するのが難しくなります。

BBCodeは本質的にそれ自体が文法であり、プログラムで文法を解釈する最良の方法は実際のパーサーを使用することです。

http://bbcode.codeplex.com/をご覧ください。その有効性を保証することはできませんが、彼らはあなたが探していることをするかもしれないC#でBBCodeのパーサーを実装しました。

于 2010-07-17T13:06:23.600 に答える