Как мне изменить этот php preg_match теперь, когда я добавил дополнительный div вокруг тегов span? - PullRequest
1 голос
/ 23 августа 2011

Я использовал это 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] ); ?>

для извлечения числа (в данном случае 2 ) между тегами .rating-result span (только):

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

Теперь я изменил вывод (я добавил дополнительный div, который окружает теги .rating-result span):

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

Выполнение var_dump до первых $thumbs_number выходов: 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, чтобы он извлек это число, как это делало раньше?

1 Ответ

0 голосов
/ 23 января 2012

Ваш шаблон:

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

имеет пробел после большого пальца. Как только я удалил это, у меня все заработало. Тем не менее, обратите внимание, что (. ) часть шаблона может включать дополнительные элементы div, отличные от блока «thumblock», поскольку он жадно совпадает. Если вы сделаете так, чтобы оно совпадало не жадно, изменив его на (. ?), То оно будет соответствовать только первому найденному, что может быть не div-блоком для большого пальца.

Эти проблемы возникают из-за ограничений использования регулярных выражений - они не предназначены для анализа вложенных тегов, таких как html. Ответ на этот вопрос может помочь: preg_match () найти все значения внутри таблицы?

...