PHP - 使用preg_match从网页上刮取DIV元素

问题描述:

I am trying to use preg_match currently just to retrieve 1 value (before I move onto retrieving multiple values), however, I am having no luck. When I perform a print_r() there is nothing stored in my array.

Here is my code what i am trying so far:

<?php
$content = '<div class="text-right font-90 text-default text-light last-updated vertical-offset-20">
    Reported ETA Received:
    <time datetime="2017-02-02 18:12">2017-02-02 18:12</time>
    UTC
</div>';
preg_match('|Reported ETA Received: <time datetime=".+">(.*)</time>(.*)\(<span title=".+">(.*)<time datetime=".+">(.*)</time></span>\)|', $content, $reported_eta_received);

if ($reported_eta_received) {
    $arr_parsed['reported_eta_received'] = $reported_eta_received[1];
}
?>

Required Output:

2017-02-02 18:12

My above-mentioned code is not working. Any help on this regards would be appreciated. Thanks in advance.

我正在尝试使用preg_match来检索1个值(在我转到检索多个值之前),但是, 我没有运气。 当我执行print_r()时,我的数组中没有任何内容。 p>

这是我的代码到目前为止我正在尝试的内容: p>

 &lt;?php 
 $ content ='&lt; div class  =“text-right font-90 text-default text-light last-updated vertical-offset-20”&gt; 
报告的ETA已收到:
&lt; time datetime =“2017-02-02 18:12”&gt;  2017-02-02 18:12&lt; / time&gt; 
 UTC 
&lt; / div&gt;'; 
preg_match('|报告的ETA收到:&lt; time datetime =“。+”&gt;(。*)&lt; / 时间&gt;(。*)\(&lt; span title =“。+”&gt;(。*)&lt; time datetime =“。+”&gt;(。*)&lt; / time&gt;&lt; / span&gt; \)  |',$ content,$ reported_eta_received); 
 
if($ reported_eta_received){
 $ arr_parsed ['reported_eta_received'] = $ reported_eta_received [1]; 
} 
?&gt; 
  code>  
 
 

必需输出: p>

  2017-02-02 18:12 
  code>  pre> 
 
 我上面提到的代码不起作用。 对此问题的任何帮助将不胜感激。 提前致谢。 p> 
  div>

It may not match because there is a new line between Reported ETA Received: and the <time> tag. And you've just put in there a space (use [ \s\t]+ instead " ").

Also, why don't you simply use:

preg_match('|<time datetime=".*?">(.*?)</time>|', $content, $reported_eta_received);

You can also use:?P<name> for a easier pointing (associative vs numeric: numeric can change if you put more capture groups).

preg_match('|<time datetime=".*?">(?P<name>.*?)</time>|', $content, $match); print_r($match); // $match['name'] should be there if matched.