文字列からbbcodeタグをストリップするための正規表現
質問
JQuery Markitupを使用する機能に取り組んでいます! BBCodeエディターとしてのエディター。以下を含むBBCodesの小さなサブセットのみを許可しています。
[b]
[i]
[quote]
[quote=Mr Incredible]
[img]
[url]
[youtube]
私はエディターを使用する1,500文字の「説明」フィールドを持っていますが、150文字を保存することも計画しています ダイジェスト すべてのBBCodeが剥奪された説明の。
現在、C#でこれを行うために単純な正規表現を使用しています。基本的には、bbcodeを文字列に埋め込みましたが、[IMG] URLや[YouTube]ビデオIDなど、ダイジェストから削除したい[YouTube]ビデオIDなど、多くの「ノイズの多いコンテンツ」が残ります。
これが私の現在の正規表現です:
public static String StripBBCode(string bbCode)
{
string r = Regex.Replace(bbCode,
@"\[(.*?)\]",
String.Empty, RegexOptions.IgnoreCase);
// Finally, replace all newlines with a space
r = Regex.Replace(r,
@"(\r\n|\n\r|\r|\n)+",
@" ", RegexOptions.IgnoreCase);
return r;
}
次の文字列をこの関数で実行すると、以下に示す結果が得られます。
ソース
This is [b]bold[/b]. This is [i]italic[/i].
Here is an image:
[img]http://www.phatmac.com/Pics/Movies/Incredibles.jpg[/img]
Here is a link to [url=http://espn.go.com]ESPN[/url].
Here is a YouTube video:
[youtube]WJ0UkZ3W4FA[/youtube]
結果
これは大胆です。これはイタリックです。これが画像です: http://www.phatmac.com/pics/movies/incredibles.jpg これがESPNへのリンクです。 YouTubeビデオは次のとおりです:wj0ukz3w4fa
これが私が取り戻したいものです
これは大胆です。これはイタリックです。これが画像です:ESPNへのリンクは次のとおりです。これがYouTubeビデオです:
これを達成するために、stripbbcode()関数を変更するにはどうすればよいですか?
編集
最初の答えで以下のDavidからの提案は正しかった。
これが私が今使っているものです:
string r = Regex.Replace(s,
@"\[youtube\].*\[\/youtube\]",
String.Empty, RegexOptions.IgnoreCase);
r = Regex.Replace(r,
@"\[img\].*\[\/img\]",
String.Empty, RegexOptions.IgnoreCase);
解決
コンテンツを削除したいタグがいくつかあり、残りはタグのみを削除したいとしています。
交換してください [img].*[/img]
string.empty、および [youtube].*[/youtube]
, 、そして、あなたがコンテンツを削除する必要がある他のものは何でも、あなたの削除を行います [.*]
.
編集:
私も正規表現の専門家ではありませんが、 @"\[img\].*?\[/img\]"
あなたが望むものです。括弧が必要だとは思わない @"\[(.*?)\]"
, 、この文脈では、括弧が一致したテキストを保存することを意味するので、もう一度一致させることができると思います。 \1
.