PHP正则表达式匹配标记与可选属性

时间:2015-01-17 04:53:36

标签: php html regex

我尝试将<html>标记与可选属性匹配并提取这些属性。我想匹配<html>标记的以下变体之一。它将是HTML文档的起始内容,或者在DOCTYPE之前可能会<html>声明。

<html>
<html lang="en">
<html class="my-class">
<html class="my-class" lang="en">

正在尝试的正则表达式模式如下所示,但它仅匹配第四种情况的最后一个属性lang="en"

/<html(\s+([a-z\-]+)=('|")([^"'>]*)('|"))*>/i

Demo

我知道有人建议使用DOM解析器而不是正则表达式。但我认为正则表达式足以满足我的要求,因为我只想匹配<html>标签。

1 个答案:

答案 0 :(得分:3)

使用以下正则表达式,然后从组索引1和3中获取属性值对。

(?:<html|(?<!^)\G)\h*(?:([^=\n\h]+)=(['"])((?:\\\2|(?!\2).)*)\2)?

\G reference.

DEMO