Как заставить это регулярное выражение соответствовать </span> - PullRequest
3 голосов
/ 20 июня 2010

Это строка HTML, с которой я буду выполнять совпадения:

<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>, оставаясь при этом частью шаблона?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 20 июня 2010

Не используйте регулярные выражения для анализа HTML.Используйте анализатор HTML.См. Надежный зрелый анализатор HTML для PHP .

2 голосов
/ 20 июня 2010

Я думаю, что причина того, что ваше регулярное выражение получает больше, чем вы хотите, заключается в том, что * жадный, соответствует как можно больше. Вместо этого используйте * ?, который будет соответствовать как можно меньше:

preg_match('/<span class="q1">(.*?)<\/span>/', $gem, $match);
2 голосов
/ 20 июня 2010
  1. Не используйте регулярные выражения для разбора HTML
  2. использовать DOM, особенно метод loadHTML и getElementsByTagName('span')

-

    $doc = new DOMDocument();
    $doc->loadHTML($htmlString);
    $spans = $doc->getElementsByTagName('span');
    if ( $spans->length > 0 ) {
     // loop on $spans
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...