PHP regexp анализирует HTML

Мое регулярное выражение:

<([a-zA-Z0-9]+)>[\na-zA-Z0-9]*<\/\1+> 

моя строка:

 <div> <f> </f> </div> 

результат:

 array(2 0 => array(1 0 => <f> </f> ) 1 => array(1 0 => f ) ) 

почему он захватывает <f></f> и игнорирует первый <div> ?

Ответ: USE A PARSER INSTEAD (извините за мой крик ). Хотя иногда быстрее использовать регулярное выражение для получения строки идентификатора или URL-адреса, html-тегам требуется довольно склонный к ошибкам способ понимания через регулярное выражение. Рассмотрим следующий код, не так ли красивее, чем друидические персонажи со специальными значениями?

 <?php $str = " <container> <div class='someclass' data='somedata'> <f>some content here</f> </div> </container>"; $xml = simplexml_load_string($str); echo $xml->div->f; // some content here $attributes = $xml->div->attributes(); print_r($attributes); // class and data as keys ?> 

Я бы сказал, это потому, что ваш второй оператор класса символов пытается найти 0 или более символов до окончания тега окончания, и это не соответствует блоку <div>...</div> .