【问题标题】:RegEx to strip BBCode tags from a string正则表达式从字符串中去除 BBCode 标签
【发布时间】:2010-12-04 00:47:48
【问题描述】:

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

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

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

我目前正在使用一个简单的 RegEx 在 C# 中执行此操作。它基本上将嵌入的 BBCodes 核对到一个字符串中,但它留下了很多“嘈杂的内容”,比如我也想从摘要中删除的 [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() 函数来实现这一点?

已编辑

大卫在第一个答案中的建议是正确的。

这是我现在使用的:

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

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

【问题讨论】:

    标签: c# regex bbcode digest markitup


    【解决方案1】:

    您有几个要删除内容的标签,其余的只是您希望删除的标签。

    [img].*[/img] 替换为string.empty 和[youtube].*[/youtube],以及您需要删除的任何其他内容,然后删除[.*]

    编辑:

    我也不是正则表达式专家,但我认为 @"\[img\].*?\[/img\]" 是您想要的。我认为您不需要@"\[(.*?)\]" 中的括号,我认为在这种情况下,括号意味着保存匹配的文本,以便您可以再次将其与\1 匹配。

    【讨论】:

    • 删除 [img].*[/img] 的 RegEx 是什么样的?我不是 RegEx 专家,我函数中的原始正则表达式是许多剪切和粘贴会话的结果,以使语法正确。
    • 谢谢。我在原始问题的末尾添加了一个似乎有效的版本。我的没有你的嵌入式问号。无论如何,感谢您为我指明正确的方向。我很感激!
    • .*? 上的问号使表达式变得懒惰,消耗满足表达式所需的最少字符数。没有它,正则表达式会将[img]asdf[/img] Important Text [img]asdf[/img] 减少为一个空字符串。
    猜你喜欢
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 2011-11-05
    • 2011-07-27
    • 2015-04-24
    相关资源
    最近更新 更多