2010-06-20 46 views
3

這是哪門子HTML字符串我將在執行比賽:如何得到這個正則表達式匹配</span>

<span class="q1">+12 Spell Power and +10 Hit Rating</span> 

我想+12 Spell Power and +10 Hit Rating出上述的HTML。這是我寫的代碼:

preg_match('/<span class="q1">(.*)<\/span>/', $gem, $match); 

但由於<\/span>它逃離/</span>所以也沒有中止比賽,所以我得到比我想要的東西多了很多數據。

我該如何逃避/</span>,同時仍然有它的一部分模式?

謝謝。

回答

2

我認爲你的正則表達式比你想要的更多的原因是因爲*是貪婪的,儘可能匹配。相反,使用* ?,這將盡可能少匹配:

preg_match('/<span class="q1">(.*?)<\/span>/', $gem, $match); 
+0

這工作表示感謝。我不想使用DOMDocument類的原因是它只是一小段HTML,並且此代碼只會運行一次,我正在收集要放入數據庫的數據。沒有必要使事情複雜化。 :) – 2010-06-20 00:52:44

2
  1. 不要使用正則表達式來解析HTML
  2. 使用DOM,特別是loadHTML方法和getElementsByTagName('span')

-

$doc = new DOMDocument(); 
    $doc->loadHTML($htmlString); 
    $spans = $doc->getElementsByTagName('span'); 
    if ($spans->length > 0) { 
    // loop on $spans 
    }