正则表达式真的不能解析 HTML 吗?
The true power of regular expressions (2012)
在 StackOverflow 的 PHP 标签下,常有人被劝告不要用正则表达式解析 HTML,理由是 HTML 不是正则语言。但这其实是个误解。现代正则表达式引擎(如 PCRE)早已超越了形式语言理论中的“正则”定义。通过递归子模式等特性,它们不仅能匹配正则语言,还能处理上下文无关语言,甚至能优雅地表达像 RFC 5322 邮箱地址这样复杂的语法规则。虽然正则表达式擅长匹配,但在构建抽象语法树方面仍有局限,但这并不妨碍它成为解析复杂文本的强大工具。
当程序员谈论“正则表达式”时,他们指的不是形式文法,而是其语言实现的正则表达式衍生版本。