【问题标题】:How to get the value of groups in preg_match_all php?如何在 preg_match_all php 中获取组的值?
【发布时间】:2012-08-13 10:42:58
【问题描述】:

嗨,我的模式是:

'<span\s+id="bodyHolder_newstextDetail_nwstxtPicPane"><a\s+href="(.*)"\s+target="_blank"><img\s+alt="(.*)"\s+title="(.*)"\s+src=\'(.*)\'\s+/>'

还有字符串:

<div class="nwstxtpic">
                        <span id="bodyHolder_newstextDetail_nwstxtPicPane"><a href="xxxxx" target="_blank"><img alt="xxxxx" title="xxxxx" src='xxxxx' />

好吧,我的用于查找和获取我在模式中定义的 4 个组的值的 php 代码是:

$picinfo=preg_match_all('/<span\s+id="bodyHolder_newstextDetail_nwstxtPicPane"><a\s+href="(.*)"\s+target="_blank"><img\s+alt="(.*)"\s+title="(.*)"\s+src=\'(.*)\'\s+/>/',$newscontent,$matches);
foreach ($matches[0] as $match) {
    echo $match;
}

这4组的值我不知道怎么取

href="(.*)"

alt="(.*)"

title="(.*)"

src=\'(.*)\'

请你帮帮我? 谢谢。

【问题讨论】:

  • 使用 xml Parsers 代替正则表达式可能会更好
  • @Yazmat 你能给我举个例子吗?我不知道如何使用 xml 解析器。它是否可以作为 preg_mach 找到某种模式?谢谢

标签: php preg-match preg-match-all


【解决方案1】:

preg_match_all() 默认按模式顺序返回结果,不太方便。传递 PREG_SET_ORDER 标志,使数据以更合乎逻辑的方式排列:

$newscontent='<span id="bodyHolder_newstextDetail_nwstxtPicPane"><a href="xxxxx" target="_blank"><img alt="xxxxx" title="xxxxx" src=\'xxxxxbb\' />'; 

$picinfo=preg_match_all('/<span\s+id="bodyHolder_newstextDetail_nwstxtPicPane"><a\s+href="(.*)"\s+target="_blank"><img\s+alt="(.*)"\s+title="(.*)"\s+src=\'(.*)\'\s+\/>/',$newscontent,$matches,PREG_SET_ORDER);
foreach ($matches as $match) {
    $href = $match[1];
    $alt = $match[2];
    $title = $match[3];
    $src = $match[4];
    echo $title;
}

【讨论】:

【解决方案2】:

您的正则表达式是正确的,正如manual 所说,默认情况下遵循PREG_PATTERN_ORDER 对结果进行排序,因此$matches[0] 是一个完整模式匹配的数组,$matches[1] 是一个与第一个匹配的字符串数组带括号的子模式,等等。

因此,在您的情况下,$matches1 将包含 href,$matches2 将包含 alt,依此类推。喜欢,

for($i = 0; $i <= count($matches[0]); $i++ )
     echo "href = {$matches[1][$i]}, alt = {$matches[2][$i]}";

$matches[0] 将包含完全匹配的字符串。

顺便说一句,总是建议使用 XML 解析器,试试 DOMDocument。 The obligatory

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-27
  • 2015-03-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多