我想使用cURL:从以下HTML代码中获取值updateXXXX
<input type="hidden" id="_postupdate" name="_postupdate" value="updateXXXX" /><input type="hidden"(...)
我试过
$regex = '/name="_postupdate" value="(.*?)" '/><input type="hidden"/s';
if ( preg_match($regex, $page, $list) )
echo $list[0];
但没有成功。有什么建议吗?:)感谢
不要用regexp解析HTML相反,让HTML解析器库为您担心标记的结构。
您可能需要使用DOMDocument
类来执行此操作。然后,您可以使用XPath查询来提取数据。
你可以使用这样的东西:
$html = '<input type="hidden" id="_postupdate" name="_postupdate" value="updateXXXX" />';
$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$tags = $xpath->query('//input[@name="_postupdate"]');
foreach ($tags as $tag) {
var_dump(trim($tag->getAttribute('value')));
}
您可以使用如下的无自由开关:
$regex = '/name="_postupdate" value="(.*)" '/><input type="hidden"/Us';
或者你排除了这样的报价:
$regex = '/name="_postupdate" value="([^"]*)" '/><input type="hidden"/s';
我同意,在一般情况下,不建议使用regex来解析html。在这种情况下,要匹配的文本定义良好且简单。
Regex比html解析器更快,但如果html代码发生微小更改,它们就会失败。在使用regex时必须意识到这一弱点,如果代码可能会随着时间的推移而演变,则应避免使用regex。