我正在尝试从某些HTML中提取值。这是我试图从中获取值的HTML文档的一部分。
<input type="hidden" id="first"
value='€218.33' />
<input type="hidden" id="second"
value='€291.08' />
<input type="hidden" id="third"
value='€344.77' />
我使用了以下preg match all命令,其中$ buffer包含我正在搜索的页面的整个html。
if (preg_match_all('/<input type="hidden" id="(.+?)" value=\'€(.+?)\'/', $buffer, $matches))
{
echo "FOUND";
echo $matches[2][0] . " " . $matches[2][1] . " " . $matches[2][2] . "\n";
}
此preg match命令未找到任何匹配项。有什么建议?
答案 0 :(得分:2)
一个非常简单的解决方案是使用PHP Simple HTML DOM Parser
str_get_html
HTML示例
include "simple_html_dom.php" ;
$html =" <input type=\"hidden\" id=\"first\"
value='€218.33' />
<input type=\"hidden\" id=\"second\"
value='€291.08' />
<input type=\"hidden\" id=\"third\"
value='€344.77' />";
用法
$html = str_get_html($html);
foreach($html->find('input') as $element)
echo $element->value . '\n';
输出
€218.33
€291.08
€344.77
答案 1 :(得分:1)
这个正则表达式没有返回任何内容,因为id和值之间有多个空格......
preg_match_all('/<input type="hidden" id="(.+?)"[.\s\t\r\n\v\f]*?value=\'€(.+?)\'/', $buffer, $matches)
注意[。\ s \ t \ r \ n \ v \ f] *?就在值=之前。这将在关闭“id之前和值=之前”之后获取任何字符。这样,空格,制表符,换行符等都不会破坏你的表达。
答案 2 :(得分:0)
怎么样?
if (preg_match_all('/<input type="hidden" id="(.+?)".+?value=\'€(.+?)\'/s', $buffer, $matches))