正则表达式PHP PRICE麻烦

时间:2013-09-28 10:05:54

标签: php regex preg-match preg-match-all

在一个字符串中,我有许多HTML元素,其中一个是应该被解析的输入。

<input name="generate" value="52FadA=" type="hidden">

我已经制作了正则表达式,但它不起作用。可能是转义字符,不清楚:(

preg_match_all('/input[\s](?:(?:name\="generate"[\s]value\="(.*)")|(?:value\="(.*)"[\s]name\="generate"))[\s]/i',$html,$matches,PREG_SET_ORDER);

有什么问题?

也非常感谢帮助做到更普遍,例如在随机属性顺序的情况下。

谢谢,奥列格。

1 个答案:

答案 0 :(得分:2)

不要用正则表达式解析html。使用DOMDocument::loadHTML($string)然后使用DOM或XPath方法查询数据。 DOMDocument::loadHTML()将优雅地解析文档片段。

在您的示例中,它可能如下所示:

$str = '<input name="generate" value="52FadA=" type="hidden">';
$doc = new DOMDocument();
$doc->loadHTML($str);

$value = $doc->getElementsByNodeName('input')->item(0)->getAttribute('value');