yat*_*aka 25 regex xml xml-parsing
我刚刚回顾了我之前发过的一篇文章,并注意到一些人建议我不使用正则表达式来解析xml.在这种情况下,xml相对简单,Regex没有任何问题.我还在解析许多其他代码格式,所以为了统一起见,它是有意义的.但我很好奇这可能会在其他情况下造成问题.这只是一个"不要重新发明轮子"的问题吗?
Ste*_*ham 40
真正的麻烦是嵌套标签.使用正则表达式很难处理嵌套标记.平衡匹配是可能的,但这只能在.NET中使用,也许还有其他几种.但即使有平衡匹配的力量,一个不合适的评论可能会摒弃正则表达.
例如,这是一个棘手的解析...
<div>
<div id="parse-this">
<!-- oops</div> -->
try to get this value with regex
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
您可以使用正则表达式追踪这样的边缘情况数小时,并且可能找到解决方案.但实际上,当有专门的XML,XHTML和HTML解析器可以更可靠,更有效地完成工作时,没有意义.
这已在SO上多次讨论过.见例如
您能否举例说明为什么用正则表达式解析XML和HTML很困难?
为什么不可能使用正则表达式来解析HTML/XML:外行人的术语中的正式解释
只需点击屏幕右侧的链接即可获得更多答案.
我的结论:
很简单,因为正则表达式不是解析器,它是查找模式的工具.
如果你想在(ht | x)ml文件中找到一个非常特殊的模式,继续,正则表达式是完美的.
但是如果你在每个Foo标签中搜索某些东西,那可能有不同顺序的属性,可以嵌套,可能是格式错误(并且仍然有效),然后使用解析器,因为那不再是模式匹配.
XML 不是常规语言(这是一个技术术语),因此您永远无法使用正则表达式正确解析它。您可能在 99% 的情况下都会成功,但随后有人会找到一种编写 XML 的方法,这会让您感到困惑。
如果您正在编写某种屏幕抓取工具,那么 99% 的成功率可能就足够了。对于大多数应用程序来说,事实并非如此。
| 归档时间: |
|
| 查看次数: |
19964 次 |
| 最近记录: |