0

可能重复:
如何使用 PHP 解析和处理 HTML?

我正在尝试从一些 html 中提取值。这是我试图从中获取值的 HTML 文档的一部分。

    <input type="hidden" id="first"
        value='&euro;218.33' />
    <input type="hidden" id="second"
        value='&euro;291.08' />
    <input type="hidden" id="third"
        value='&euro;344.77' />

我使用了以下 preg match all 命令,其中 $buffer 包含我正在搜索的页面的整个 html。

if (preg_match_all('/<input type="hidden" id="(.+?)" value=\'&euro;(.+?)\'/', $buffer, $matches))
{
   echo "FOUND";
   echo  $matches[2][0] . " " . $matches[2][1] . " " . $matches[2][2] . "\n";
} 

此 preg match 命令未找到任何匹配项。有什么建议么?

4

3 回答 3

2

一个非常简单的解决方案是使用PHP Simple HTML DOM Parser str_get_html

HTML 示例

include "simple_html_dom.php" ;

$html =" <input type=\"hidden\" id=\"first\"
    value='&euro;218.33' />
<input type=\"hidden\" id=\"second\"
    value='&euro;291.08' />
<input type=\"hidden\" id=\"third\"
    value='&euro;344.77' />";

用法

$html = str_get_html($html);
foreach($html->find('input') as $element)
    echo $element->value . '\n';

输出

€218.33
€291.08
€344.77
于 2012-09-04T10:23:16.857 回答
1

这个正则表达式没有返回任何东西,因为在 id 和 value 之间有多个空格......

preg_match_all('/<input type="hidden" id="(.+?)"[.\s\t\r\n\v\f]*?value=\'&euro;(.+?)\'/', $buffer, $matches)

注意 [.\s\t\r\n\v\f]*? 就在价值=之前。这将在 id 的关闭 " 之后和 value=" 之前使用任何字符。这样,空格、制表符、换行符等不会破坏您的表达。

于 2012-09-04T10:29:49.993 回答
0

关于什么

if (preg_match_all('/<input type="hidden" id="(.+?)".+?value=\'&euro;(.+?)\'/s', $buffer, $matches))
于 2012-09-04T10:29:46.347 回答