【问题标题】:How should I modify this php preg_match now that I added an extra div around the span tags?既然我在 span 标签周围添加了一个额外的 div,我应该如何修改这个 php preg_match?
【发布时间】:2011-08-23 02:32:29
【问题描述】:

我曾经应用过这个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 标签之间的数字(在本例中为 2):

<div class="thumblock">
    <span class="rating-result">2</span>

    <div class="ratingtext">
      <div id="gdsr_thumb_124_a_up" class="gdt-size-20 gdthumb gdup">
        <div class="gdt-starrating"></div>
      </div>

      <div id="gdsr_thumb_124_a_dw" class="gdt-size-20 gdthumb gddw">
        <div class="gdt-starrating"></div>
      </div>
    </div>

    <div class="raterclear"></div>
  </div>

现在,我修改了输出(我添加了一个围绕.rating-result span 标签的额外 div):

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

对第一个$thumbs_number 执行var_dump 输出:string(2) "+1"

执行var_dump 到第二个$thumbs_number 输出:string(2) "+1"

但是我使用变量$thumbs_number的函数已经不起作用了(get_rating_class();被放在一个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);
}

这完全一样,但看起来像 我应该如何修改 preg_match 以使其像以前一样提取该数字?

【问题讨论】:

  • 那你为什么不直接添加 span 占位符,或者直接找那个占位符呢?你也意识到它会更简单,例如qp($html)-&gt;find(".thumblock .rating-result").text() (...) - 虽然尚不清楚哪种方法适合您的情况。

标签: php preg-match


【解决方案1】:

你的模式:

'!<div class="thumblock ">(.*)</div>!si'

拇指锁定后有一个空格。一旦我删除它,它对我来说就可以了。但是请注意,模式的 (.) 部分可能包含除拇指锁之外的额外 div,因为它会贪婪地匹配。如果通过将其更改为 (.?) 使其非贪婪匹配,则它只会匹配它找到的第一个,这可能不是拇指锁 div。

这些问题的出现是因为使用正则表达式的限制——它们不是为解析嵌套标签而设计的,例如 html。这个问题的答案可能会有所帮助: preg_match() find all values inside of table?

【讨论】:

    猜你喜欢
    • 2014-05-22
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    相关资源
    最近更新 更多