3v4l.org

run code in 300+ PHP versions simultaneously
<?php $html_string = '<!DOCTYPE html> <html> <body> <div id="foo"> This is a paragraph with <strong>Some nested tags</strong> </div> <div class="test" id="bar"> <div> And a nested div? </div> </div> <div class="baz test"> <p> Pretty normal HTML. </p> </div> </body> </html>'; $regex = '/<div[^>]*?(class="(.+?)"[^>]*)?>((?:.*?(?:(?!<div)|(?R))*)*)' . '<\/div>/sm'; if (preg_match_all($regex, $html_string, $matches, PREG_SET_ORDER)) { var_dump($matches); }
Output for 4.3.0 - 4.3.11, 4.4.0 - 4.4.9, 5.0.0 - 5.0.5, 5.1.0 - 5.1.6, 5.2.0 - 5.2.17, 5.3.0 - 5.3.29, 5.4.0 - 5.4.45, 5.5.24 - 5.5.35, 5.6.7 - 5.6.28, 7.0.0 - 7.0.20, 7.1.0 - 7.1.20, 7.2.0 - 7.2.33, 7.3.12 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.6
array(3) { [0]=> array(4) { [0]=> string(88) "<div id="foo"> This is a paragraph with <strong>Some nested tags</strong> </div>" [1]=> string(0) "" [2]=> string(0) "" [3]=> string(68) " This is a paragraph with <strong>Some nested tags</strong> " } [1]=> array(4) { [0]=> string(77) "<div class="test" id="bar"> <div> And a nested div? </div> </div>" [1]=> string(21) "class="test" id="bar"" [2]=> string(4) "test" [3]=> string(44) " <div> And a nested div? </div> " } [2]=> array(4) { [0]=> string(70) "<div class="baz test"> <p> Pretty normal HTML. </p> </div>" [1]=> string(16) "class="baz test"" [2]=> string(8) "baz test" [3]=> string(42) " <p> Pretty normal HTML. </p> " } }

preferences:
258.67 ms | 407 KiB | 314 Q