preg_match和RegEx从HTML页面中查找号码

时间:2013-05-30 11:07:46

标签: php regex preg-match

使用preg_match函数,我想从以下html字符串中找到数字30899。

我使用了以下代码行:

preg_match("/<a ?.* onclick=\"cms4i.models.dealersearch.view.navigate\('DETAIL', '(.*)'\);\" class=\"partner_name link\">Zentrum GmbH Standort<\/a>/i", $data, $matches);

它不返回任何匹配的字符串,尽管$ data在这里有30899。

$ data变量如下:

<li class="partner_teaser clearfix">
  <div class="partner_gutter">
    <a href="#" onclick="cms4i.models.dealersearch.view.navigate('DETAIL', '30899');" class="counter link">01</a>
    <i class="icon_car" title="Partner (Verkauf)">Partner (Verkauf)</i>
    <i class="icon_spanner" title="Partner (Service)">Partner (Service)</i>
  </div>
  <div class="partner_summary">
  <a href="#" onclick="cms4i.models.dealersearch.view.navigate('DETAIL', '30899');" class="partner_name link">Zentrum GmbH Standort</a>
  <div>Franklinstraße 24</div><div>10587 City</div>
  <div>5,4 km</div>
  <a href="#" onclick="cms4i.models.dealersearch.view.navigate('DETAIL', '30899');" class="link link_a1">Auf Karte anzeigen</a>
  </div>
</li>

虽然我之前解决了这类问题,但我找不到如何从这个字符串中找到这些数字的解决方案。我相信专家可以快速找到解决方案。

2 个答案:

答案 0 :(得分:2)

正如我所见,您正在搜索navigate方法中的参数编号。所以,您可以尝试:

preg_match_all('/\.navigate\([a-zA-Z\,\s\']+([0-9]{3,})\'\);" class="partner_name link"\>Zentrum GmbH Standort\<\/a\>/', $html, $matches);

print_r($matches[1]);

输出:

Array
(
    [0] => 30899
    [1] => 30899
    [2] => 30899
)

然后,如果可以有多个唯一编号,则可以排除重复的数字。如果没有,只提取一个数字,而不是全部。

答案 1 :(得分:0)

怎么样?

preg_match('/<a (.*) onclick=/', $data);