SO的日子一天天过去,毫无疑问地需要使用正则表达式来解析(X)HTML或XML。
虽然相对容易找到一些例子来说明正则表达式在该任务中不可行,或者用一些表达该概念的表达式,但我仍然无法在正式的解释中找到为什么不能在外行人家中做这件事的正式解释。条款。
到目前为止,我在该站点上唯一能找到的正式解释可能是非常准确的,但对于自学成才的程序员也很神秘:
这里的缺点是HTML是Chomsky Type 2语法(无上下文语法),RegEx是Chomsky Type 3语法(正则表达式)
要么:
正则表达式只能匹配正则语言,而HTML是无上下文的语言。
要么:
有限自动机(它是正则表达式基础的数据结构)除了处于其所在的状态外没有其他内存,如果您具有任意深度的嵌套,则需要一个任意大的自动机,它会与有限自动机的概念相冲突。
要么:
常规语言的Pumping引理是您不能这样做的原因。
[公平地说:以上解释的大部分都链接到Wikipedia页面,但是这些答案比答案本身更容易理解]。
因此,我的问题是:有人可以用外行的形式对上述为什么不能使用正则表达式解析(X)HTML / XML的正式解释进行翻译吗?
编辑:阅读完第一个答案后,我认为我应该澄清一下:我正在寻找一种“翻译”,它也简要地解释了它试图翻译的概念:在回答的最后,读者应该有一个大概的想法-例如-“常规语言”和“无上下文语法”的含义是什么...