嗨,我的模式是:
'<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' />
好吧,我的用于查找和获取我在patern中定义的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=\'(.*)\'
你能帮帮我吗? 谢谢。
答案 0 :(得分:6)
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;
}
答案 1 :(得分:1)
您的RegEx是正确的,正如manual所说,默认情况下PREG_PATTERN_ORDER
遵循哪些订单结果,以便$matches[0]
是完整模式匹配的数组,$matches[1]
是由第一个带括号的子模式匹配的字符串数组,依此类推。
因此,在您的情况下,$ matches 1将包含href,$ matches 2将包含alt,依此类推。像,
for($i = 0; $i <= count($matches[0]); $i++ )
echo "href = {$matches[1][$i]}, alt = {$matches[2][$i]}";
$matches[0]
将包含完整匹配的字符串。