2013-04-18 2 views
1

Мне нужно найти и заменить все теги div, которые содержат тег img, я пробовал некоторое регулярное выражение без succes :( это пример регулярного выражения, которое я пробовал: /(<div class="indicator"[^<]*>.*<img[^>]*>[^<]*</div>)/g Помогите пожалуйстаРегулярные выражения: найти все теги div, содержащие тег img

Спасибо

+1

И что вы хотите сделать, когда div содержит div, который содержит изображение? Вы уверены, что не хотите анализировать вместо регулярного выражения? –

+1

http://php.net/manual/en/book.dom.php – Sammitch

+2

Не разбирайте HTML с регулярными выражениями. Они не подходят для этого. http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags#answers – shark555

ответ

1

Если у вас есть потенциал, имеющие вложенные Div Div изображение как dystroy сказал, то он не может быть сделано правильно с регулярным выражением, как это на самом деле не регулярный язык. Возможно, вы должны использовать DOM. Это актуально: How do you parse and process HTML/XML in PHP?

1

Лучше не пытаться разобрать HTML с помощью RegEx, это может быть подвержено ошибкам. Используя DOM вы можете сделать:

$doc = new DOMDocument(); 
libxml_use_internal_errors(true); 
$doc->loadHTML($html); // loads your html 
$nodeList = $doc->getElementsByTagName('div'); 
for($i=0; $i < $nodeList->length; $i++) { 
    $node = $nodeList->item($i); 
    $children = $node->childNodes; 
    foreach ($children as $child) { 
     if ($child->nodeName == 'img') { 
      echo "DIV tag contains IMG tag\n"; 
      break; 
     } 
    } 
} 
Смежные вопросы