如何在标签内的标签上使用正则表达式?

时间:2011-10-24 08:48:37

标签: c# regex

我目前正在写一个使用正则表达式解析模板的小项目,现在最大的问题是我们在这里得到了一个“标签”,这使得它有点困难。

Regex reg = new Regex(@"##############TEMPLATEENGINE(^#)##############(.*?)##############TEMPLATEENGINE(\1)##############", RegexOptions.IgnoreCase | RegexOptions.Compiled);

适用于

等模板
  ######## TEMPLATEENGINE $$ startswith $$帐户:名字$$ Firstn ##############      

blah

     ######## TEMPLATEENGINE $$ startswith $$帐户:名字$$ Firstn      ######## TEMPLATEENGINEaccount:firstname ##############缺少属性:名字! ############## TEMPLATEENGINEaccount:姓

但是只要我有

这样的模板
  ######## TEMPLATEENGINE $$ startswith $$帐户:名字$$ Firstn ##############      

blah

     ######## TEMPLATEENGINEaccount:firstname ##############缺少属性:名字! ############## TEMPLATEENGINEaccount:姓      ######## TEMPLATEENGINE $$ startswith $$帐户:名字$$ Firstn ##############      

blahg

它只是找到内部模板,虽然我认为\ 1应该确保开始和结束应该相等....

1 个答案:

答案 0 :(得分:0)

我想让这种模式发挥作用:

########TEMPLATEENGINE([^#]+)##############(((?!########TEMPLATEENGINE(?!\1)).)*)########TEMPLATEENGINE\1##############

但到目前为止还没有运气,我需要继续前进 - 无论如何我都发布了它,以防它有所帮助,因为我认为这种技术是合理的。我会稍后删除它(或修复它,如果可以的话!)如果没有人使用它,那么请不要投票 - 我不是说它是一个完整的解决方案!

请注意,您需要迭代匹配表达式,首先捕获内部标记。

另请注意,######## TEMPLATEENGINEaccount:firstname ##############的结束标记似乎与示例的格式不同(缺少#suffix) ) - 这是一个问题吗?