2010-06-20 3 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, и этот код будет запускаться только один раз, я собираю данные, которые нужно поместить в базу данных. Не нужно усложнять вещи. :) –

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 
    }