# OtherWorld (22.07.2017 / 22:10)Сегодня расковырял твою задачу на чистых регулярках, с группировкой по массивам - у меня код получился менее затратный
Решил вопрос с помощью нескольких циклов и многомерного массива
regex (+/-)
<?php
$str = '
<div class = "list">
<div class = "room">
<div class = "user" style = "font-size: 1px;"></div>
<div class = "user" style = "font-size: 2px;"></div>
<div class = "user" style = "font-size: 3px;"></div>
</div>
<div class = "room">
<div class = "user" style = "font-size: 4px;"></div>
<div class = "user" style = "font-size: 5px;"></div>
<div class = "user" style = "font-size: 6px;"></div>
</div>
</div>
';
$patt = '~
(?:
(?<=<div\sclass\s=\s"room">)
(?:.*)
(?=</div>(?:\s*)<div\sclass\s=\s"room">)
|
(?<=<div\sclass\s=\s"room">)
(?:.*)
(?=</div>(?:\s*)</div>)
)
~sx';
if (preg_match_all($patt, $str , $a)) {
$out = [];
foreach ($a[0] as $item) {
!preg_match_all('~style\s?=\s?"([^"]+)"~', $item, $arr)
?: $out[] = join(',', $arr[1]);
}
echo '<pre>'; print_r($out); echo '</pre>';
}
/* Вывод:
array(
[0] => font-size: 1px;,font-size: 2px;,font-size: 3px;
[1] => font-size: 4px;,font-size: 5px;,font-size: 6px;
)
*/