Вы должны использовать DOMDocument и DOMXPath или что-то в этом роде, но если вы хотите, чтобы это было сделано с помощью регулярного выражения, для вашего заданного html это должно сработать:
<code><?php
$html_code =
'<a href="/napolnye-pokrytiya/" class="category_cart">
<div class="category_cart__container">
<div style="background-image: url(\'/media/filer_public/b6/49/b6491a4d-5c0d-4a0f-aa9c-b32ea39912c6/category-2.jpg\')" class="category_cart__thumbnail"></div>
<div class="category_cart__content">
<p class="category_cart__title">Напольные покрытия</p>
</div>
</div>
</a>
<a href="/oboi/" class="category_cart">
<div class="category_cart__container">
<div style="background-image: url(\'/media/filer_public/93/65/9365c3bc-8649-4d9d-932e-144f16ed535c/category-3.jpg\')" class="category_cart__thumbnail"></div>
<div class="category_cart__content">
<p class="category_cart__title">Обои</p>
</div>
</div>
</a>';
//it will look for match between url(' and ')
preg_match_all('/url\(\'(.*?)\'\)/', $html_code, $matches_array);
echo '<pre>';
var_dump($matches_array);
echo '
';
$ your_array = array ();
// совпадения, включая url ('и'), хранятся в $ match_array [0], исключаются в $ match_array [1], поэтому
foreach ($ match_array [1] как $ match) {
$ your_array [] = $ match;
}
echo '
';
var_dump($your_array);
echo '
';
?>
Выход:
array(2) {
[0]=>
array(2) {
[0]=>
string(84) "url('/media/filer_public/b6/49/b6491a4d-5c0d-4a0f-aa9c-b32ea39912c6/category-2.jpg')"
[1]=>
string(84) "url('/media/filer_public/93/65/9365c3bc-8649-4d9d-932e-144f16ed535c/category-3.jpg')"
}
[1]=>
array(2) {
[0]=>
string(77) "/media/filer_public/b6/49/b6491a4d-5c0d-4a0f-aa9c-b32ea39912c6/category-2.jpg"
[1]=>
string(77) "/media/filer_public/93/65/9365c3bc-8649-4d9d-932e-144f16ed535c/category-3.jpg"
}
}
array(2) {
[0]=>
string(77) "/media/filer_public/b6/49/b6491a4d-5c0d-4a0f-aa9c-b32ea39912c6/category-2.jpg"
[1]=>
string(77) "/media/filer_public/93/65/9365c3bc-8649-4d9d-932e-144f16ed535c/category-3.jpg"
}