<div class="begin">...</div>
Как сопоставить html внутри (включая) <div class="begin">
в PHP?
Мне нужно регулярное выражение, которое может обрабатывать вложенный файл .
Используйте DOM и DOMXPath вместо регулярного выражения, вы поблагодарите меня за это:
// something useful: function dumpDomNode ($node) { $temp = new DOMDocument(); $temp->appendChild($node,true); return $temp->saveHTML(); } $dom = new DOMDocument(); $dom->loadHTML($html_string); $xpath-> new DOMXpath($dom); $elements = $xpath->query("*/div/[@class='begin']"); foreach ($elements as $el) { echo dumpDomNode($el); // <-- or do something more useful with it }
Попробовать это с помощью регулярного выражения приведет вас к пути к безумию …
Это очень хорошо.
Короче говоря, не используйте регулярные выражения для синтаксического анализа HTML. Вместо этого просмотрите классы DOM и особенно DOMDocument :: loadHTML
Вот ваше Regex:
preg_match('/<div class=\"begin\">.*<\/div>/simU', $string, $matches);
Но:
// Create DOM from URL $html = file_get_html('http://example.org/'); echo $html->find('div.begin', 0)->outertext;
вот один из способов использования строковых методов
$str= <<<A blah <div class="begin"> blah blah blah blah blah </div> blah A; $s = explode("</div>",$str); foreach($s as $k=>$v){ $m=strpos($v,'<div class="begin">'); if($m !==FALSE){ echo substr("$v" ,$m); } }
вывод
$ php test.php <div class="begin"> blah blah blah blah blah