2011-08-23 59 views
1

我來施塗本的PHP的preg_match:所述.rating-result跨度標籤之間我應該如何修改這個PHP preg_match現在我添加了一個額外的div圍繞span標籤?

<?php preg_match('!<div class="thumblock ">(.*)</div>!si' , wp_gdsr_render_article_thumbs(0, false, "", 0, "", false) , $n); 
$thumbs_number = strip_tags($n[1]); ?> 

提取的數目(在這種情況下)(只):

<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才能使它像以前一樣提取數字?

+0

爲什麼不直接添加span佔位符,或直接找那個?另外你也會意識到,這樣做會比較簡單。 ();();找到(「。thumblock .rating-result」)。text()'[(...)](http://querypath.org/) - 儘管目前還不清楚哪種方法是合適的爲你的情況。 – mario

回答

0

你的模式:

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

具有thumblock後的空間。一旦我刪除了它,它對我來說確實很好。但請注意,該模式的(。)部分可能包含除了縮略圖之外的其他div,因爲它與貪婪匹配。如果您通過將它更改爲(。?)而非貪婪地進行匹配,那麼它只會匹配它找到的第一個,這可能不是thumblock div。

這些問題是由於使用正則表達式的限制而出現的 - 它們不是用來解析嵌套標籤,比如html。這個問題的答案可能會有所幫助: preg_match() find all values inside of table?

相關問題