如何匹配HTML"选择" preg_match的选项

时间:2015-12-22 12:59:07

标签: php regex

如果浏览器具有<option>属性,则会默认选中selected="selected"。但是,即使省略了该属性值,这也会有所作为。

所以

<option selected="selected" value="1">value text</option>

这是有效的

<option selected value="1">value text</option>

我的问题是如何编写一个匹配上述两个条件的正则表达式模式,但从不匹配像

这样的东西

<option value="the devil with **selected** ">value text</option>

编辑:我忘了提到某些条件仍然被认为是有效的XHTML,例如选择=&#39;选择&#39;,或选择=选择或甚至选择= SelEctEd

2 个答案:

答案 0 :(得分:0)

使用PCRE(PHP使用),这有效:

<option.*?\s(?:selected(?:=\"selected\")?)\s.*?>
# look for <option literally
# followed by anything (non greedy) and a whitespace(!)
# open a non capturing group and look for selected, eventually followed by ="selected"
# close the group, followed by a whitespace
# followed by anything (non-greedy) and the closing tag

请在此处查看a regex 101 demo。此外,阅读评论,在那里有一个很好的提示(使用DomDocument等)。

答案 1 :(得分:0)

在此讨论之后,以及其他一些资源如“RegEx match open tags except XHTML self-contained tags”我意识到使用正则表达式准确解析XHTML是不切实际的。