使用preg_match提取表单值PHP?

时间:2016-08-07 16:56:52

标签: php regex

我使用file_get_contents从其他网站获取html页面,我想提取表单值.Html看起来像这样:

<input type='hidden' name='csrfmiddlewaretoken' value='here'>

那么,我如何使用here

获得preg_replace

到目前为止我的尝试:

preg_match_all("/'hidden' value='(.*?)'/",$html, $matches); 不行不通!

2 个答案:

答案 0 :(得分:3)

不要使用正则表达式来解析HTML。使用专门为此设计的工具。

$previous_value = libxml_use_internal_errors(TRUE);

$string ="<input type='hidden' name='csrfmiddlewaretoken' value='here'>";
$dom = new DOMDocument();
$dom->loadHTML($string);
$input = $dom->getElementsByTagName('input')->item(0);
echo $input->getAttribute("value");

libxml_clear_errors();
libxml_use_internal_errors($previous_value);

Demo

答案 1 :(得分:2)

如评论中所述,请改为使用DOM解析器:

<?php

$data = <<<DATA
<input type='hidden' name='csrfmiddlewaretoken' value='here'>
DATA;

$dom = new DOMDocument();
$dom->loadHTML($data);

$xpath = new DOMXPath($dom);

$input = $xpath->query("//input[@name = 'csrfmiddlewaretoken']/@value")->item(0)->nodeValue;
echo $input;
# here
?>