0

我想使用 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];

但没有成功。有什么建议吗?:) 谢谢

4

2 回答 2

4

不要用正则表达式来削弱自己解析 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')));
}
于 2013-08-28T20:56:37.983 回答
0

您可以像这样使用不贪婪的开关:

$regex = '/name="_postupdate" value="(.*)" \/><input type="hidden"/Us';

或者您排除这样的引号:

$regex = '/name="_postupdate" value="([^"]*)" \/><input type="hidden"/s';

我同意在一般情况下不建议使用正则表达式来解析 html。在这种情况下,要匹配的文本定义明确且简单。

正则表达式比 html 解析器更快,但如果 html 代码有微小的变化,它们就会失败。在使用正则表达式时必须意识到这一弱点,如果代码有一点可能随着时间的推移而演变,请避免使用它。

于 2013-08-28T21:10:02.127 回答