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

本文关键字:标签 正则表达式 | 更新日期: 2023-09-27 18:12:16

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

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

这样的模板上工作得很好
# # # # # # # # TEMPLATEENGINE startswith美元美元账户:firstname倘若美元美元 ##############

等等# # # # # # # # TEMPLATEENGINE startswith美元美元账户:firstname倘若美元美元########TEMPLATEENGINEaccount:firstname##############属性缺失:firstname !############## TEMPLATEENGINEaccount: firstname

但是一旦我有了像

这样的模板
# # # # # # # # TEMPLATEENGINE startswith美元美元账户:firstname倘若美元美元 ##############

等等########TEMPLATEENGINEaccount:firstname##############属性缺失:firstname !############## TEMPLATEENGINEaccount: firstname# # # # # # # # TEMPLATEENGINE startswith美元美元账户:firstname倘若美元美元 ##############

blahg

它只找到内部模板,尽管我认为'1应该确保开始和结束应该相等....

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

我试着让这个模式工作:

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

但是到目前为止还没有运气,我需要继续前进——我已经把它贴出来了,以防它有帮助,因为我认为这个技术是合理的。如果没有人使用它,我会稍后删除它(或者修复它,如果可以的话!),所以请不要投票否决-我并没有声称这是一个完整的解决方案!

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

还要注意,结束标签########TEMPLATEENGINEaccount:firstname##############似乎是在一个不同的格式的例子(缺少它的#后缀)-这是一个问题吗?