没有哪一天在 SO 中不会问到如何使用正则表达式解析(X) HTML 或 XML 的问题。
虽然用 演示正则表达式对于此任务的不可行性的示例或 表达式集合来表示这个概念相对容易,但是我仍然找不到一个 正式的来解释为什么不能用外行的术语来做这件事。
到目前为止,我能在这个网站上找到的唯一正式的解释可能是极其准确的,但对于自学成才的程序员来说也是相当神秘的:
这里的缺陷是 HTML 是 Chomsky Type 2语法(上下文无关) RegEx 是 Chomsky Type 3语法(正则表达式)
或:
正则表达式只能匹配正则语言,但 HTML 是 上下文无关语言
或:
一个有限自动机(它是一个正则数据库的底层数据结构) 表达式)除了它所处的状态之外没有内存,如果 你有任意深的嵌套,你需要一个任意大 这与有限自动机的概念相冲突。
或:
常规语言的抽取引理是您不能这样做的原因 那个。
[公平地说: 上面的大部分解释链接到维基百科页面,但是这些并不比答案本身更容易理解]。
所以我的问题是: 能否有人提供一个翻译,在外行的术语正式解释为什么不可能使用正则表达式解析(X) HTML/XML?
编辑: 在阅读了第一个答案后,我想我应该澄清一下: 我在寻找一个“翻译”,也简短地 解释它试图翻译的概念: 在一个答案的结尾,读者应该有一个粗略的想法-例如-什么是“常规语言”和“上下文无关文法”的含义..。