Intereting Posts
Мягкий Удалить все записи из таблицы в laravel 5 Как получить значение поля ввода с помощью PHP zend_navigation и атрибут onclick Bootstrap – требуется скрывать контент до тех пор, пока модальные нагрузки Symfony fosuserbundle добавить объект учетной записи для лица Как добавить и объединить текстовое значение из 2 элементов textarea и заполнить комбинированный текст в третьем текстовом поле с помощью JavaScript? Получите результаты от php exec (), пока команда все еще работает? PHP Использовать имя переменной в foreach после установки значения Поделитесь СЕССИЕЙ на нескольких серверах с разными доменами Запуск приложения командной строки из PHP в качестве конкретного пользователя Как я могу отправлять электронные письма из класса обслуживания Symfony2? Отображение результатов гиперссылок, таких как поисковая система PHP array_intersect или in_array, тогда MYSQL повторение с помощью набора изменений Doctrine Что значит ? среднее значение в php при чтении и интерпретации URL-адреса

проблема с регулярным выражением в php

<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); 

Но:

  • RegEx не знает, какие элементы XML / HTML. Для них HTML – это просто строка. Вот почему другие правы . Регулярные выражения не предназначены для разбора DOM . Они используются для поиска строковых шаблонов .
  • Я предоставил Regex, потому что вы не собираетесь анализировать всю HTML-страницу, а просто извлекаете из нее один определенный фрагмент текста , и в этом случае Regex отлично подходит для использования.
  • Если внутри DIV есть вложенный DIV, Regex не будет работать должным образом. Если это так, не используйте Regex. Используйте одно из других решений, потому что тогда вам нужен разбор DOM, а не соответствие строк.
  • Для поиска строк с более или менее четко определенными начальными и конечными значениями вместо этого используйте вместо них регулярные строковые функции, поскольку они часто бывают более быстрыми.
 // Create DOM from URL $html = file_get_html('http://example.org/'); echo $html->find('div.begin', 0)->outertext; 

http://simplehtmldom.sourceforge.net/manual.htm

вот один из способов использования строковых методов

 $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