Как собрать текст URL внутри HTML-div с помощью регулярного выражения? - PullRequest
0 голосов
/ 20 марта 2019

У меня есть строка со ссылками внутри div.Как я могу использовать правильное регулярное выражение для его анализа?

Мне нужно получить массив этих значений следующим образом:

[
"/media/filer_public/b6/49/b6491a4d-5c0d-4a0f-aa9c-b32ea39912c6/category-2.jpg", 
"/media/filer_public/93/65/9365c3bc-8649-4d9d-932e-144f16ed535c/category-3.jpg"
]

Базовый HTML (пример):

               <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>

1 Ответ

0 голосов
/ 20 марта 2019

Вы должны использовать 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"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...