1

在我的应用程序中,我试图获取谷歌索引页面,我知道该数字在以下 div 中可用

<div id="resultStats"> About 1,960,000 results (0.38 seconds) </div> 

现在我的问题是如何从网页中的 div 上方提取数字

4

3 回答 3

4

永远不要使用正则表达式来解析 HTML。(参见:RegEx 匹配开放标签,XHTML 自包含标签除外

使用 HTML 解析器,例如 SimpleDOM ( http://simplehtmldom.sourceforge.net/ )

您可以使用 CSS 规则来选择:

$html = file_get_html('http://www.google.com/');
$divContent =  $html->find('div#resultStats', 0)->plaintext;

$matches = array();
preg_match('/([0-9,]+)/', $divContent, $matches);
echo $matches[1];

Outputs: "1,960,000"
于 2013-06-28T08:09:17.547 回答
3
$str = '<div id="resultStats"> About 1,960,000 results (0.38 seconds) </div> ';

$matches = array();
preg_match('/<div id="resultStats"> About ([0-9,]+?) results[^<]+<\/div>/', $str, $matches);

print_r($matches);

输出:

Array ( 
        [0] => About 1,960,000 results (0.38 seconds)
        [1] => 1,960,000 
      )

这是带有子模式的简单正则表达式

  • ([0-9,]+?)- 表示 0-9 个数字和 , 字符至少 1 次且不贪心。
  • [^<]+- 表示每个字符,但 < 超过 1 次

echo $matches[1];- 将打印您想要的号码。

于 2013-06-28T08:09:06.000 回答
1

您可以为此使用正则表达式( preg_match )

$your div_string = '<div id="resultStats"> About 1,960,000 results (0.38 seconds) </div>';

preg_match('/<div.*>(.*)<\/div>/i', $your div_string , $result);

print_r( $result );

输出将是

Array  (
   [0] => <div id="resultStats"> About 1,960,000 results (0.38 seconds) </div>
   [1] =>  About 1,960,000 results (0.38 seconds) 
)

这样你就可以在div里面获取内容

于 2013-06-28T08:05:26.067 回答