我目前正在写一个使用正则表达式解析模板的小项目,现在最大的问题是我们在这里得到了一个“标签”,这使得它有点困难。
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应该确保开始和结束应该相等....
答案 0 :(得分:0)
我想让这种模式发挥作用:
########TEMPLATEENGINE([^#]+)##############(((?!########TEMPLATEENGINE(?!\1)).)*)########TEMPLATEENGINE\1##############
但到目前为止还没有运气,我需要继续前进 - 无论如何我都发布了它,以防它有所帮助,因为我认为这种技术是合理的。我会稍后删除它(或修复它,如果可以的话!)如果没有人使用它,那么请不要投票 - 我不是说它是一个完整的解决方案!
请注意,您需要迭代匹配表达式,首先捕获内部标记。
另请注意,######## TEMPLATEENGINEaccount:firstname ##############的结束标记似乎与示例的格式不同(缺少#suffix) ) - 这是一个问题吗?