我需要帮助修改C#正则表达式

时间:2011-02-24 22:41:13

标签: c# asp.net regex tags forum

我正在使用正则表达式检测帖子中的论坛标签,例如“[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;
});

现在,每个标记都附加一个数字,我可以使用原始正则表达式来执行标记函数,并将嵌套标记正确地作为单独的标记处理。实际上,我需要的是我列出的正则表达式,以我指定的方式进行修改。

随意提供其他建议,但我会问实际答案是关注正则表达式修改,而不是这是否是解决问题的最佳方法。

谢谢!

2 个答案:

答案 0 :(得分:1)

这可能会对你有所帮助,这是我写的一段时间的bbcode解析器,基本上就是你正在做的事情。

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

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

答案 1 :(得分:0)

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