Как я могу найти содержимое первого тега h3?

Я ищу регулярное выражение, чтобы найти содержимое первого <h3> . Что я могу использовать там?

Вы должны использовать php DOM parser вместо регулярных выражений. Вы ищете что-то вроде этого (предупреждение непроверенного кода):

 $domd = new DOMDocument(); libxml_use_internal_errors(true); $domd->loadHTML($html_content); libxml_use_internal_errors(false); $domx = new DOMXPath($domd); $items = $domx->query("//h3[position() = 1]"); echo $items->item(0)->textContent; 

Ну, простым решением было бы следующее:

 preg_match( '#<h3[^>]*>(.*?)</h3>#i', $text, $match ); echo $match[1]; 

Тем не менее, для всего более сложного вам следует использовать парсер документов HTML.

Вот объяснение, почему анализ HTML с регулярными выражениями является злом. Во всяком случае, это способ сделать это …

 $doc = new DOMDocument(); $doc->loadHTML($text); $headings = $doc->getElementsByTagName('h3'); $heading = $headings->item(0); $heading_value = (isset($heading->nodeValue)) ? $heading->nodeValue : 'Header not found'; 

Подход DOM:

 <?php $html = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head><title></title> </head> <body> <h1>Lorem ipsum<h1> <h2>Dolor sit amet<h2> <h3>Duis quis velit est<h3> <p>Cras non tempor est.</p> <p>Maecenas nec libero leo.</p> <h3>Nulla eu ligula est</h3> <p>Suspendisse potenti.</p> </body> </html> '; $doc = new DOMDocument; $doc->loadHTML($html); $titles = $doc->getElementsByTagName('h3'); if( !is_null($titles->item(0)) ){ echo $titles->item(0)->nodeValue; } ?> 

Прежде всего: регулярные выражения не являются подходящим инструментом для анализа HTML-кода. Однако в этом случае они должны быть достаточно хорошими, потому что теги H3 не могут быть вложены.

 preg_match_all('/<h3[^>]*>(.*?)<\/h3>/si', $source, $matches); 

переменная $matches matches должна содержать контент из тегов H3 .

Используйте выражение xpath, например

 "/html/body/h3[0]" 

это выберет весь первый узел h3.

Обратите внимание, что это не будет работать на плохо сформированном html.

PHP имеет возможность самостоятельно анализировать HTML DOM – вы почти наверняка хотите использовать это вместо регулярного выражения.

Подробнее см. На этой странице: http://php.net/manual/en/book.dom.php

И проверьте связанные вопросы с правой стороны для людей, задающих очень похожие вопросы.

 preg_match("/&lt;h3&gt;(.*)&lt;\/h3&gt;/", $search_in_this_string, $put_matches_in_this_var);