既然我在span标记周围添加了一个额外的div,我应该如何修改这个php preg_匹配?
我过去常常应用这个php preg_match:既然我在span标记周围添加了一个额外的div,我应该如何修改这个php preg_匹配?,php,preg-match,Php,Preg Match,我过去常常应用这个php preg_match: <?php preg_match( '!<div class="thumblock ">(.*)</div>!si' , wp_gdsr_render_article_thumbs(0, false, "", 0, "", false) , $n ); $thumbs_number = strip_tags( $n[1] ); ?> 现在,我修改了输出(我在.rating resultspan标记周围添加了一
<?php preg_match( '!<div class="thumblock ">(.*)</div>!si' , wp_gdsr_render_article_thumbs(0, false, "", 0, "", false) , $n );
$thumbs_number = strip_tags( $n[1] ); ?>
现在,我修改了输出(我在.rating result
span标记周围添加了一个额外的div):
这是完全一样的,但看起来
我应该如何修改preg\u match
,使其像以前一样提取该数字?您的模式:
'!<div class="thumblock ">(.*)</div>!si'
“!(.*)!是的
在拇指锁后有一个空格。一旦我移除了它,它对我来说就正常了。但是请注意,模式的(.)部分可能包括除拇指锁以外的额外div,因为它非常匹配。如果您通过将其更改为(.?)使其非贪婪地匹配,那么它将只匹配它找到的第一个,这可能不是thumblock div
出现这些问题是因为使用正则表达式的局限性——它们不是为解析嵌套标记(如html)而设计的。这个问题的答案可能有助于:
为什么不添加span占位符,或者直接查找该占位符?您还意识到,使用例如
qp($html)->find(“.thumblock.rating result”).text()
会更简单,尽管还不清楚哪种方法适合您的情况。
<div class="thumblock">
<div id="gdsr_thumb_text_137_a" class="gdt-size-20 voted inactive gdthumbtext">
<span class="rating-result">2</span>
</div>
<div class="ratingtext">
<div id="gdsr_thumb_137_a_up" class="gdt-size-20 gdthumb gdup">
<div class="gdt-starrating"></div>
</div>
<div id="gdsr_thumb_137_a_dw" class="gdt-size-20 gdthumb gddw">
<div class="gdt-starrating"></div>
</div>
</div>
<div class="raterclear"></div>
</div>
function get_rating_class($thumbs_number) {
if ($thumbs_number < 0) return ' bad';
if ($thumbs_number < 2) return ' average';
if ($thumbs_number < 4) return ' good';
return ' excellent';
}
function rating_class($thumbs_number) {
echo get_rating_class($thumbs_number);
}
'!<div class="thumblock ">(.*)</div>!si'