2012-10-22 28 views
2

我有一個變量($page),它包含HTML代碼如下:使用PHP正則表達式獲取特定的「<elm> ..</elm>」?

<html> 
    <head>head</head> 
    <body> 
     <strong>12</strong> 
     recommendations 
     <br /> 
     <strong>50</strong> 
     connections 
    </body> 
</html> 

現在我想連接的數量(在這種情況下,它50)與PHP正則表達式,所以我用這個:

preg_match('#<strong>(.*)</strong>#', $page, $connections) 

但這得12,不50。我怎麼解決這個問題?

+0

你想要兩個值還是總是第二個?總是最後一個?始終是「連接」之前的那個? (另請參閱http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags-有更好/更簡單的方式來處理HTML。) – 2012-10-22 16:12:06

回答

4
preg_match('/<strong>([0-9]*)<\/strong>\s+connections/', $page, $connections); 

echo $connections[1]; // 50 
+1

+1因爲,如果這肯定是一個醜陋的正則表達式 - 我反對這個,但那是另一個問題 - 最好使它具體到問題。 – 2012-10-22 16:13:51

2

注意不要使用正則表達式解析HTML,請看preg_match_all()。如果HTML遵循這種結構,那麼您對第二場比賽感興趣。

+0

應該是' preg_match_all' - 該死的SO不允許一個char編輯 – sgroves

+0

@sgroves,謝謝。更新。 –

+0

@JasonMcCreary它的工作原理,但我可以使用#(。*)/\ r \ n/connections#?實際上我想在正則表達式中添加「連接」,怎麼做? – stevey