好的,我们都知道尝试使用 Regex 解析 HTML会招致 Cthulhu 的愤怒。很好。对于为什么不应该这样做,有一些很好的回应。我接受这些,并且不止一次地在问题上发布了这些链接。
但是让我们把这个问题放在以下范围内:除了正则表达式之外,我们别无选择来解析 HTML。为什么?没关系。 但是暂时假设我们的开发人员想对小马托尼失去理智,并尽最大努力完成不可能的事情。如果这让你大吃一惊,那么假设这个问题是理论上的。无论你的船漂浮。只需考虑使用正则表达式解析 HTML 的想法,即使您不应该这样做。
在这里,我们看到了一种不可能做到的主张,至少在完美的情况下是不可能的。但是@NikiC 在它下面有一个非常明智的评论:
这个答案从错误的论点(“因为 HTML 不是常规语言”)中得出了正确的结论(“用正则表达式解析 HTML 是个坏主意”)。现在大多数人说“正则表达式”(PCRE)时所指的东西不仅能够解析上下文无关的语法(实际上这很简单),而且还能够解析上下文相关的语法(参见https://stackoverflow.com/一个/7434814/1222420)
事实是,你可以用现代正则表达式做一些非常强大的事情,即使相当冗长。但是很多人认为这个问题听起来像停止问题:你可以尝试,但总会有另一种情况导致你的解决方案失效。
所以这是一个问题,它有点两部分。
- 是否可以生成完美的正则表达式来解析 HTML?
- 如果是这样,证明是建设性的吗?我们只知道我们可以,还是已经做到了?
- 如果不可能,那么最准确的方法是什么?