gpt4 book ai didi

php - 使用 preg_match_all 匹配通配符而不添加到数组中

转载 作者:搜寻专家 更新时间:2023-10-31 20:37:33 25 4
gpt4 key购买 nike

我正在尝试从如下所示的元素中捕获表格文本:

<span id="ctl00_MainContent_ListView2_ctrl2_ctl01_Label17" class="vehicledetailTable" style="display:inline-block;width:475px;">OWNED</span><br />                                            

我的preg_match_all 看起来像:

preg_match_all('~475px;">(.*?)</span><br />~', $ret, $vehicle);

问题是页面上还有其他表也匹配但数据与我的查询不相关。我想要的数据都在“ListView2”中,但“ct101_Label17”有所不同 - Label18、Label19、Label20 等。

由于我对捕获标签不感兴趣,是否有一种方法可以在不捕获匹配项的情况下匹配主题字符串?类似的东西:

<span id="ctl00_MainContent_ListView2_ctrl2_ctl01_[**WILDCARD HERE**]" class="vehicledetailTable" style="display:inline-block;width:475px;">OWNED</span><br />    

如有任何帮助,我们将不胜感激。

最佳答案

这是您目前正在考虑的一个非常糟糕的解决方案:

<span\b[^<>]*\bid="ctl00_MainContent_ListView2_ctrl2_ctl01_[^"]*"[^<>]*475px;">(.*?)</span><br\s*/>

参见 demo

它确保我们找到了 <span>标签,并且有 idctl00_MainContent_ListView2_ctrl2_ctl01_ 开头的属性,并且有一些属性(你知道它是 style )以 475px; 结尾, 然后我们只捕获结束 </span> 之前的所有内容标签。

您可以使用 DOM 和 XPath 来实现这一点,这是一种使用与上述相同逻辑的更安全的解决方案:

$html = "<span id=\"ctl00_MainContent_ListView2_ctrl2_ctl01_Label17\" class=\"vehicledetailTable\" style=\"display:inline-block;width:475px;\">OWNED</span><br />"; 
$dom = new DomDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$spans = $xpath->query("//span[starts-with(@id,'ctl00_MainContent_ListView2_ctrl2_ctl01_') and @class='vehicledetailTable' and contains(@style,'475px;')]");
$data = array();
foreach ($spans as $span) {
array_push($data, $span->textContent);
}
print_r($data);

输出:[0] => OWNED

请注意,XPath 表达式包含 3 个条件,请随意修改:

  • //span - 获取所有
  • 的 span 标签
  • starts-with(@id,'ctl00_MainContent_ListView2_ctrl2_ctl01_') - 有一个属性 id值以 ctl00_MainContent_ListView2_ctrl2_ctl01_ 开头
  • @class='vehicledetailTable' - 并且有 class值等于 vehicledetailTable 的属性
  • contains(@style,'475px;') - 并且有一个 style值包含 475px; 的属性.

条件包含在[...]中并加入 orand .它们也可以用圆括号分组。您也可以使用 not(...)反转条件。 XPath 在这种情况下非常有用。

关于php - 使用 preg_match_all 匹配通配符而不添加到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31367074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com