【发布时间】: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