【问题标题】:I need help modifying a C# regular expression我需要帮助修改 C# 正则表达式
【发布时间】:2011-07-03 22:40:59
【问题描述】:

我正在使用正则表达式来检测帖子中的论坛标签,例如“[quote]text[/quote]”,然后将它们替换为 HTML 格式。我发布了一个关于嵌套标签问题的问题Forum tags. What is the best way to implement them?

我有一个想法,但我需要有人帮助我扩展它(因为我不擅长正则表达式)。

我需要修改这个正则表达式

string regex = @"\[([^=]+)[=\x22']*(\S*?)['\x22]*\](.+?)\[/(\1)\]";

现在这匹配一个开始和结束标记,标记名称、标记内容和一个可选值(例如此论坛标记[url=www.google.com]click me[/url] 中的等号后面的值)的匹配组。

我需要让表达式匹配开始标签或结束标签,并有一个包含标签名称的匹配组(包括结束标签的“/”)。然后我想像这样遍历它们:

Dictionary<string, int> tagCollection = new Dictionary<string, int>();
inputString = Regex.Replace(inputString, @"expression I'm asking for here",
match =>
{
    string tag = match.Groups[0].Value;
    bool isOpeningTag = tag.StartsWith("/");
    tag = isOpeningTag ? tag : tag.Replace("/","");
    int tagCount = 0;
    if (tagCollection.ContainsKey(tag) && isOpeningTag)
    {
        tagCount = tagCollection[tag];
        tagCollection[tag] = tagCount + 1;
    }
    else if (tagCollection.ContainsKey(tag) && !isOpeningTag)
    {
        tagCount = tagCollection[tag];
        tagCollection[tag] = tagCount - 1;
    }
    else if (!tagCollection.ContainsKey(tag) && isOpeningTag)
        tagCollection.Add(tag, tagCount);

    string newTag = match.Value.Replace(tag, tag + tagCount.ToString());
    return newTag;
});

所以现在,每个标签都附加了一个数字,我可以使用原始的正则表达式来执行标签功能并将嵌套标签作为单独的标签正确处理。所以真的,我需要你们提供的只是我列出的正则表达式,可以按照我指定的方式进行修改。

也可以随意提供其他建议,但我会要求实际答案集中在正则表达式修改上,而不是这是否是解决问题的最佳方法。

谢谢!

【问题讨论】:

  • 不是一个解决方案,但可以从radsoftware.com.au 获取一份 RegEx Design 的副本,这是试验 regex 的绝佳方式。我总是将它添加到 VS 的外部工具列表中。
  • 我一定会去看看 :)
  • 我更喜欢这里的那个:Ultrapico ultrapico.com
  • @Steve Expresso 很棒。我只是用它来玩正则表达式,直到我得到我想要的。谢谢!

标签: c# asp.net regex tags forum


【解决方案1】:

\[([^=]+)[=\x22']*(\S*?)['\x22]*\]|\[/(\1)\]

【讨论】:

    【解决方案2】:

    这可能会对你有所帮助,这是我不久前写的一个 bbcode 解析器,基本上完全按照你在做的事情。

    https://github.com/Mike343/Netcoders/tree/master/Coders.Services/Formatters

    https://github.com/Mike343/Netcoders/blob/master/Coders.Services/Formatters/BBCodeFormatter.cs

    【讨论】:

    • 这很整洁。我将来可能会使用它。但是,为了问题的简单性,我省略了项目的一些复杂性。我真的很想以我指定的方式修改我发布的正则表达式。不过我很欣赏这一点。 +1
    • 我知道,但我做的操作比将 bbcode 换成 HTML 要复杂得多。正如我所说,这并不重要。一个简单的事实是我想要修改正则表达式。这是问题的性质,如粗体线所示。就像我说的,我很感激 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 2023-03-19
    • 1970-01-01
    • 2011-09-19
    相关资源
    最近更新 更多