1

JQuery MarkItUp! を使用する機能に取り組んでいます。エディターを BBCode エディターとして。以下を含む BBCode の小さなサブセットのみを許可しています。

[b]
[i]
[quote]
[quote=Mr Incredible]
[img]
[url]
[youtube]

エディターを使用する 1,500 文字の「説明」フィールドがありますが、BBCode をすべて取り除いた 150 文字の説明のダイジェストも保存する予定です。

現在、C# でこれを行うために単純な RegEx を使用しています。基本的には、文字列に埋め込まれた BBCode を削除しますが、[img] URL や [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);
4

1 に答える 1

2

コンテンツを削除したいタグがいくつかあり、タグのみを削除したい残りのタグがあります。

[img].*[/img]を string.empty に置き換えて[youtube].*[/youtube]、内容を削除する必要があるものをすべて削除してから、 を削除します[.*]

編集:

私も正規表現の専門家ではありません@"\[img\].*?\[/img\]"が、あなたが望むものだと思います。の括弧は必要ないと思います@"\[(.*?)\]"。このコンテキストでは、括弧は一致したテキストを保存して、 と再度一致させることができると思います\1

于 2010-12-04T00:55:34.350 に答える