【发布时间】:2011-08-02 16:50:54
【问题描述】:
我遇到了一个解析问题,这需要一个非常小的正则表达式来解决,除了要工作的模式,它应该是递归的。
示例:
{([^{}]*(?:{(?1)})?)
我希望它匹配的是一个特定的 RTF 标头,但要做到这一点,我需要它是递归的。
{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fnil\fcharset0 Tahoma;}}
.NET 是否有某种非真正的类似 RegEx 的引擎实现,可以找到与这些类型的模式匹配的(甚至可能是不同的语法)?
更新:
非常感谢大家告诉我有关正则表达式的 .NET 实现中的 Balancing Group 选项,尤其是 Qtax,他在下面提供了一个非常全面的链接作为评论,这帮助我理解了这一切的意义,也用于发布我的具体示例的答案。如果您正在阅读本文,并且它也对您有所帮助,请务必支持该答案。
但是......这并没有回答有关递归可能性的一般问题在.NET Regex-like 引擎中。幸运的是(我喜欢挑战)这个例子并不是我遇到的唯一例子。其他情况无法使用此解决方案解决,但只能通过引用不匹配,而是重用模式序列,直到可以递归的程度。
【问题讨论】:
-
虽然不是递归的直接答案,但 .NET 对 Balanced Trees 的支持可能对这个问题有用。
-
是的,我确实觉得这很有帮助,谢谢。然而,这并不是我需要递归正则表达式的唯一情况。