RegEx从字符串中剥离BBCode标记

时间:2010-12-04 00:47:48

标签: c# regex bbcode digest markitup

我正在开发一个使用JQuery MarkItUp的功能!编辑作为BBCode编辑。我只允许一小部分BBC代码,包括以下内容:

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

我有一个使用编辑器的1,500个字符“描述”字段,但我还计划存储描述的150个字符摘要,并删除所有BBCode。

我目前正在使用简单的RegEx在C#中执行此操作。它基本上将字符串中的嵌入式BBCode核心化,但它留下了很多“嘈杂的内容”,如[img] URL或[youtube]视频ID,我也想从摘要中删除。

这是我目前的RegEx:

  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()函数来实现这个目标?

EDITED

第一个答案中David的建议是正确的。

以下是我现在正在使用的内容:

 string r = Regex.Replace(s,
    @"\[youtube\].*\[\/youtube\]",
    String.Empty, RegexOptions.IgnoreCase);

 r = Regex.Replace(r,
    @"\[img\].*\[\/img\]",
    String.Empty, RegexOptions.IgnoreCase);

1 个答案:

答案 0 :(得分:2)

您有多个标记要删除内容,其余部分只需要删除标记。

使用string.empty和[img].*[/img]替换[youtube].*[/youtube],以及删除内容时需要的其他内容,然后删除[.*]

编辑:

我也不是正则表达式专家,但我认为@"\[img\].*?\[/img\]"就是你想要的。我认为您不需要@"\[(.*?)\]"中的括号,我认为在此上下文中,括号表示保存匹配的文本,以便您可以再次使用\1进行匹配。