为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

慕容3067478 2019-06-25 15:19:55

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

查看完整描述

3 回答

?
繁星coding

真正的问题是嵌套标记。嵌套标记很难用正则表达式处理。有可能平衡匹配,但这只在.NET中可用,可能还有其他几种版本。但是即使有了平衡匹配的能力,一个错误的评论也有可能抛弃正则表达式。

例如,这是一个很难解析的问题.

<div>
    <div id="parse-this">
        <!-- oops</div> -->
        try to get this value with regex    </div></div>

您可以使用正则表达式搜索这样的边缘情况数小时,并可能会找到解决方案。但实际上,当有专门的XML、XHTML和HTML解析器能够更可靠、更有效地完成这项工作时,就没有意义了。


查看完整回答
反对 回复 2019-06-25
?
慕仰8121524

这一点在这里已经讨论过很多次了。见A.

您能提供一些示例,说明为什么用regex解析XML和HTML很困难吗?

为什么不能使用regex解析HTML/XML:一种外行术语的正式解释

只需按照屏幕右侧的链接找到更多答案。

我的结论是:

简单,因为正则表达式不是解析器,这是一个可以找到的工具模式.

如果您想在(ht\x)ml文件中找到一个非常特定的模式,那么继续,regex是最好的选择。

但是,如果您要在每个foo标记中搜索可能具有不同顺序的属性、可以嵌套的属性、格式错误的属性(并且仍然有效),那么就使用解析器,因为这不再是模式匹配了。


查看完整回答
反对 回复 2019-06-25
?
一只萌萌小番薯

XML不是一种常规语言(这是一个技术术语),因此您永远无法使用正则表达式正确地解析它。您可能在99%的时间内都是成功的,但随后有人会找到一种编写XML的方法,它会抛出您。

如果你正在写一种屏幕刮刀,那么99%的成功率就足够了。对于大多数应用程序来说,情况并非如此。


查看完整回答
反对 回复 2019-06-25

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信