回溯平衡组与贪婪重复可能会导致不平衡?作为这个问题的一般酿造的一个例子,我的意图是匹配一些数字,然后是相同数量的b,加上一个b'。查看此片段中显示的两种模式(也在ideone.com上):varr1=newRegex(@"(?xn)(?a)+(?b)+(?(A)(?!))b");varr2=newRegex(@"(?xn)(?a)+(?b)+?(?(A)(?!))b");Console.WriteLine(r1.Match("aaabbb"));//aaabbbConsole.WriteLine(r2.Match("aaabbb"));//aabbb注意两种模式的匹配是有区别的。r1对平衡组构造使用贪婪重复,匹配3a和3b,这不是预期的。r2使用不情愿的重复,给出了2a和3b,这是预期的。我能解释的唯一方法是,当(?b)+回溯匹配少一个b时,它会从B堆栈中弹出,但不会推回相应从A堆栈中弹出的内容。因此即使由于回溯现在少了一个b匹配项,A堆栈仍然是空的。这是我可以解释r1如何匹配aaabbb的唯一方法。注意使用勉强+?不会在r2中导致此问题。在我看来,这是因为与贪婪的重复不同,不情愿的重复不必“消除对A堆栈的损害”,可以这么说。相比之下,贪婪重复会造成尽可能多的“损害”,但回溯不能“让事情保持原样”到A-stack。这是对发生的事情的正确分析吗?如果是这样,这种行为是否符合设计?因为在我看来基本上在贪婪重复中回溯平衡组可能会导致不平衡,所以这可以归类为错误(或者至少是一种没有很好记录的有点令人惊讶的行为)。这是单声道中的错误。人们在IdeOne上获得类似Environment.Versionfor.NET的原因是Mono需要与.NET的向后兼容性,包括与根据框架版本做出决策的应用程序的兼容性。以上是C#学习教程:BalancinggroupswithgreedyrepetitionbacktrackingMaycauseimbalance?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
