Хорошо, это довольно простой вопрос, но я им не знаком с PHP и не смог понять это. Строка ввода – это $ data im, пытающаяся продолжать тянуть и использовать только первое совпадение. Неправильно ли это? Это может быть даже не лучший способ выполнить действие, im просто пытается вытащить содержимое между двумя html-тегами (первый набор найден) и отбросить остальную часть данных. Я знаю, что есть похожие вопросы, я читаю их все, мой вопрос – это смесь, если это лучший способ сделать это и как я могу определить совпадение в качестве нового ввода для остальной части оставшегося кода. Если я изменяю $ matches на $ data2 и использую его оттуда, он возвращает ошибки.
preg_match('/<h2>(.*?)<\/h2>/s', $data, $matches);
Использование регулярных выражений, как правило, является хорошей идеей для вашей проблемы.
Когда вы посмотрите на http://php.net/preg_match, вы увидите, что $ matches будет массивом, так как может быть несколько совпадений. Пытаться
print_r($matches);
чтобы получить представление о том, как выглядит результат, а затем выбрать правильный индекс.
РЕДАКТИРОВАТЬ:
Если есть совпадение, вы можете получить текст, извлеченный между группой скобок, с помощью
print($matches[1]);
Если у вас было более одной группы скобок, они были бы пронумерованы 2, 3 и т. Д. Вы также должны рассмотреть случай, когда совпадения нет, и в этом случае массив будет иметь размер 0.
Не анализируйте HTML через preg_match
, вместо этого используйте этот класс PHP:
Пример:
<?php $html= "<p>hi</p> <h1>H1 title</h1> <h2>H2 title</h2> <h3>H2 title</h3>"; // a new dom object $dom = new domDocument('1.0', 'utf-8'); // load the html into the object ***/ $dom->loadHTML($html); //discard white space $dom->preserveWhiteSpace = false; $hTwo= $dom->getElementsByTagName('h2'); // here u use your desired tag echo $hTwo->item(0)->nodeValue; //will return "H2 title"; ?>
Справка
Вы можете сделать это так:
$h1 = preg_replace('/<h1[^>]*?>([\\s\\S]*?)<\/h1>/', '\\1', $h1);
Это приведет к отключению или разворачиванию ТЕКСТа из HTML-тегов <H1></H1>