这是我将要执行的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>
,同时仍然将其作为模式的一部分?
感谢。
答案 0 :(得分:2)
loadHTML
方法和getElementsByTagName('span')
-
$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);