我在正则表达式中遇到了将代码划分为功能组件的问题。它们可能会破裂,也可能需要很长时间才能完成。这段经历提出了一个问题:
“我什么时候应该使用解析器?”
当您对以下内容感兴趣时,应该使用解析器文本的词汇或语义意义,当模式可以变化时。当您只是想了解时,解析器通常是矫枉过正的匹配或替换字符模式,无论其功能含义如何。
就您而言,您似乎对文本背后的含义(代码的“功能组件”)感兴趣,因此解析器将是更好的选择。然而,解析器可以在内部使用正则表达式,因此它们不应被视为相互排斥。
然而,“解析器”并不自动意味着它必须很复杂。例如,如果您对 C 代码块感兴趣,您可以简单地解析嵌套的 { 和 } 组。该解析器只对两个标记(“{”和“}”)以及它们之间的文本块感兴趣。
然而,由于嵌套语义,简单的正则表达式比较在这里是不够的。采取以下代码:
void Foo(bool Bar)
{
if(Bar)
{
f();
}
else
{
g();
}
}
解析器将理解 Foo 的整体范围,以及 Foo 中包含的每个内部范围(if 和 else 块)。当它遇到每个“{”标记时,它“理解”它们的含义。然而,简单的搜索并不能理解文本背后的含义,并且可能将以下内容解释为一个块,我们当然知道这是不正确的:
{
if(Bar)
{
f();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)