为什么用regex解析XML是个坏主意?

为什么用regex解析XML是个坏主意?我只是回顾了我之前写的一篇文章,注意到很多人建议我不使用Regex来解析XML。在这种情况下,XML相对简单,Regex没有造成任何问题。我还解析了许多其他代码格式,因此为了一致性起见,这是有意义的。但我很好奇这在其他情况下会有什么问题。这仅仅是一个“不要重新发明车轮”的问题吗?

慕容3067478
浏览 612回答 3
3回答

繁星coding

真正的问题是嵌套标记。嵌套标记很难用正则表达式处理。有可能平衡匹配,但这只在.NET中可用,可能还有其他几种版本。但是即使有了平衡匹配的能力,一个错误的评论也有可能抛弃正则表达式。例如,这是一个很难解析的问题.<div> &nbsp;&nbsp;&nbsp;&nbsp;<div&nbsp;id="parse-this"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--&nbsp;oops</div>&nbsp;--> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;to&nbsp;get&nbsp;this&nbsp;value&nbsp;with&nbsp;regex&nbsp;&nbsp;&nbsp;&nbsp;</div></div>您可以使用正则表达式搜索这样的边缘情况数小时,并可能会找到解决方案。但实际上,当有专门的XML、XHTML和HTML解析器能够更可靠、更有效地完成这项工作时,就没有意义了。

小怪兽爱吃肉

这一点在这里已经讨论过很多次了。见A.您能提供一些示例,说明为什么用regex解析XML和HTML很困难吗?为什么不能使用regex解析HTML/XML:一种外行术语的正式解释只需按照屏幕右侧的链接找到更多答案。我的结论是:简单,因为正则表达式不是解析器,这是一个可以找到的工具模式.如果您想在(ht\x)ml文件中找到一个非常特定的模式,那么继续,regex是最好的选择。但是,如果您要在每个foo标记中搜索可能具有不同顺序的属性、可以嵌套的属性、格式错误的属性(并且仍然有效),那么就使用解析器,因为这不再是模式匹配了。

一只萌萌小番薯

XML不是一种常规语言(这是一个技术术语),因此您永远无法使用正则表达式正确地解析它。您可能在99%的时间内都是成功的,但随后有人会找到一种编写XML的方法,它会抛出您。如果你正在写一种屏幕刮刀,那么99%的成功率就足够了。对于大多数应用程序来说,情况并非如此。
打开App,查看更多内容
随时随地看视频慕课网APP