Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
既然我在span标记周围添加了一个额外的div,我应该如何修改这个php preg_匹配?_Php_Preg Match - Fatal编程技术网

既然我在span标记周围添加了一个额外的div,我应该如何修改这个php preg_匹配?

既然我在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

<?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'