当前位置: 首页 > 知识库问答 >
问题:

preg_match和RegEx从HTML页面中查找数字

田曜瑞
2023-03-14

使用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个答案

张通
2023-03-14

怎么样?

preg_match('/<a (.*) onclick=/', $data);
罗金林
2023-03-14

正如我所看到的,您正在搜索导航方法中的参数数字。因此,您可以尝试:

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
)

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

 类似资料:
  • 我试图创建一个preg_匹配,在HTML文档中查找一系列标记。 HTML示例: 我需要找到带有div class=“importantclass”的标签和一个包含特定指针文本的后续p标签的组合。 然后我需要返回开始div类的位置。注意:我不想获得匹配,因为importantclass div第一次出现。 有没有可能不使用DOM而只使用regexp来实现这一点? 谢谢你的提示!

  • 我在vim中使用这个正则表达式搜索和替换命令从每个匹配的id中减去一个常量。 我可以在VSCode中查找正则表达式,但如何引用数学的子匹配 谢谢。

  • 问题内容: 我可以这样做: 但是,鉴于使用XPath可以简单地查询并完成它的事实,这似乎是微不足道的。 在IE9 +,Safari5 +,Chrome19+,Firefox12+,Opera11+上运行的HTML文档中,在特定元素下获取所有文本节点的最简单方法是什么? “最简单”被粗略地定义为“高效而又短,没有打高尔夫球”。 问题答案: 根据@kennebec的回答,该逻辑的实现略为严格: 但是,

  • 问题内容: 我对正则表达式很陌生。您能帮我创建一个匹配整个单词,包含特定部分的模式吗?例如,如果我有一个文本字符串“执行正则表达式匹配”,并且如果我搜索 express ,它将给我 expression ;如果我搜索 form ,它将给我 Perform 等。有这个主意吗? 问题答案: 哪里: 是单词边界 是一个或多个“单词”字符* 是零个或多个“单词”字符 有关PCRE的信息,请参见有关转义序列

  • 问题内容: 正则表达式使用PHP中的preg_match查找多次出现的相同字符串的正确语法是什么? 例如,查找以下段落中是否在TWICE中出现以下字符串: 问题答案: 您要使用。这就是代码中的样子。实际函数返回找到的项目数,但数组将保存结果: 将输出: 找到2个匹配项

  • 我需要在文本中找到一些字符串后,在括号内的关键字第一次出现。下面是文本示例: Lorem ipsum dolor sit amet,consectetur adipisising elit,sed do eiusmod tempor incidunt ut labore et dolore magna aliqua。===第一个关键字===veniam,{{文本需要得到}}ullamco labo