如何使这个正则表达式匹配

时间:2010-06-20 00:44:19

标签: php html regex parsing

这是我将要执行的HTML字符串匹配:

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

我希望从上面的HTML中获取+12 Spell Power and +10 Hit Rating。这是我写的代码:

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

但是由于<\/span>它正在逃避/中的</span>所以它不会停止匹配,因此我获得的数据远远超出我想要的数据。

我如何逃避/中的</span>,同时仍然将其作为模式的一部分?

感谢。

3 个答案:

答案 0 :(得分:2)

  1. 不要使用正则表达式来解析HTML
  2. 使用DOM,尤其是loadHTML方法和getElementsByTagName('span')
  3. -

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

答案 1 :(得分:2)

不要使用正则表达式来解析HTML。使用HTML解析器。请参阅Robust, Mature HTML Parser for PHP

答案 2 :(得分:2)

我认为你的正则表达式比你想要的更多是因为*是贪婪的,尽可能匹配。相反,使用*?,它将尽可能少地匹配:

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