Код: Выделить всё
$xml='<Cities> '.str_repeat("<City> <name>Москва</name> </City>", 7).' <Cities>';
preg_match_all('~<(.*?)(?:\s+(.*?))?>(.*?)<\/\1>~', $xml, $matches);
print_r($matches);
Код: Выделить всё
Array
(
[0] => Array
(
[0] => <City> <name>Москва</name> </City>
[1] => <City> <name>Москва</name> </City>
[2] => <City> <name>Москва</name> </City>
[3] => <City> <name>Москва</name> </City>
[4] => <City> <name>Москва</name> </City>
[5] => <City> <name>Москва</name> </City>
[6] => <City> <name>Москва</name> </City>
)
[1] => Array
(
[0] => City
[1] => City
[2] => City
[3] => City
[4] => City
[5] => City
[6] => City
)
[2] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
[5] =>
[6] =>
)
[3] => Array
(
[0] => <name>Москва</name>
[1] => <name>Москва</name>
[2] => <name>Москва</name>
[3] => <name>Москва</name>
[4] => <name>Москва</name>
[5] => <name>Москва</name>
[6] => <name>Москва</name>
)
)
<City> <name>Москва</name><year>1147</year>
то ничего не находит уже не при 8, а при 7 повторах.
Я в растерянности
UPD: решение неэлегантное, но простое.
ini_set("pcre.backtrack_limit",10000000);
ini_set("pcre.recursion_limit",10000000);