The problem is when the content consists of more divs, nested divs like this:
<div class="box" id="customer-login">Content <div class="bl-2">more stuff</div>more contents</div>
Any ideas on how I make my regexp work with nested tags?
Thanks
The problem is when the content consists of more divs, nested divs like this:
<div class="box" id="customer-login">Content <div class="bl-2">more stuff</div>more contents</div>
Any ideas on how I make my regexp work with nested tags?
Thanks
Try a parser instead:
require_once "simple_html_dom.php";
$text = 'foo <div id="t1">Content <div>more stuff</div></div> bar <div>even more</div> baz <div id="t2">yes</div>';
$html = str_get_html($text);
foreach($html->find('div') as $e) {
if(isset($e->attr['id']) && preg_match('/^t\d++/', $e->attr['id'])) {
echo $e->outertext . "\n";
}
}
Output:
<div id="t1">Content <div>more stuff</div></div>
<div id="t2">yes</div>
Download the parser here:http://simplehtmldom.sourceforge.net/
Edit: More for my own amusement I tried to do it in regex. Here's what I came up with:
$text = 'foo <div id="t1">Content <div>more stuff</div></div> bar <div>even more</div>
baz <div id="t2">yes <div>aaa<div>bbb<div>ccc</div>bbb</div>aaa</div> </div>';
if(preg_match_all('#<div\s+id="t\d+">[^<>]*(<div[^>]*>(?:[^<>]*|(?1))*</div>)[^<>]*</div>#si', $text, $matches)) {
print_r($matches[0]);
}