RegEx для извлечения путей к изображениям в PHP - PullRequest
1 голос
/ 05 апреля 2019

Я хочу извлечь конкретный URL, соответствующий шаблону, из заданного тега img в PHP.

Ввод

<img class="ezlazyload aligncenter size-large wp-image-473313" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22459%22%20height%3D%22600%22%3E%3C%2Fsvg%3E" alt="shiny-ash-hat-pikachu" width="459" height="600" data-ezsrc="https://cdn.gamerant.com/wp-content/uploads/shiny-ash-hat-pikachu-459x600.png" data-ezsrcset="https://cdn.gamerant.com/wp-content/uploads/shiny-ash-hat-pikachu-459x600.png 459w, https://cdn.gamerant.com/wp-content/uploads/shiny-ash-hat-pikachu-138x180.png 138w, https://cdn.gamerant.com/wp-content/uploads/shiny-ash-hat-pikachu-314x410.png 314w, https://cdn.gamerant.com/wp-content/uploads/shiny-ash-hat-pikachu.png 640w">

Выше мой $img_tag, и я хочу извлечь изображениеURL либо в любом формате (jpg или png) в приведенном выше теге:

Попытка

preg_match_all('/"(https:\/\/cdn.gamerant.com\/wp-content\/uploads\/.+?\.png)"/s', $img_tag, $matches1, PREG_PATTERN_ORDER);

Над одним извлечением только .png, если я изменить на .jpg означает, что этоИзвлечь JPG, Как извлечь PNG или JPG, если таковые имеются в данном $img_tag?

1 Ответ

2 голосов
/ 05 апреля 2019

Я уверен, что есть гораздо более простые способы решить вашу проблему. Это просто продолжение вашего исходного метода, используя круглые скобки () для группировки:

$img_tag = '<img class="ezlazyload aligncenter size-large wp-image-473313" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22459%22%20height%3D%22600%22%3E%3C%2Fsvg%3E" alt="shiny-ash-hat-pikachu" width="459" height="600" data-ezsrc="https://cdn.gamerant.com/wp-content/uploads/shiny-ash-hat-pikachu-459x600.png" data-ezsrcset="https://cdn.gamerant.com/wp-content/uploads/shiny-ash-hat-pikachu-459x600.PNG 459w, https://cdn.gamerant.com/wp-content/uploads/shiny-ash-hat-pikachu-138x180.jpg 138w, https://cdn.gamerant.com/wp-content/uploads/shiny-ash-hat-pikachu-314x410.JPEG 314w, https://cdn.gamerant.com/wp-content/uploads/shiny-ash-hat-pikachu.jpeg 640w">';

preg_match_all('/(https:\/\/cdn.gamerant.com\/wp-content\/uploads\/)(.+?\.)(png|jpg|jpeg|JPEG|PNG|JPG)/s', $img_tag, $matches1, PREG_PATTERN_ORDER);

var_dump($matches1);

Все выходы:

array(4) {
  [0]=>
  array(5) {
    [0]=>
    string(77) "https://cdn.gamerant.com/wp-content/uploads/shiny-ash-hat-pikachu-459x600.png"
    [1]=>
    string(77) "https://cdn.gamerant.com/wp-content/uploads/shiny-ash-hat-pikachu-459x600.PNG"
    [2]=>
    string(77) "https://cdn.gamerant.com/wp-content/uploads/shiny-ash-hat-pikachu-138x180.jpg"
    [3]=>
    string(78) "https://cdn.gamerant.com/wp-content/uploads/shiny-ash-hat-pikachu-314x410.JPEG"
    [4]=>
    string(70) "https://cdn.gamerant.com/wp-content/uploads/shiny-ash-hat-pikachu.jpeg"
  }
  [1]=>
  array(5) {
    [0]=>
    string(44) "https://cdn.gamerant.com/wp-content/uploads/"
    [1]=>
    string(44) "https://cdn.gamerant.com/wp-content/uploads/"
    [2]=>
    string(44) "https://cdn.gamerant.com/wp-content/uploads/"
    [3]=>
    string(44) "https://cdn.gamerant.com/wp-content/uploads/"
    [4]=>
    string(44) "https://cdn.gamerant.com/wp-content/uploads/"
  }
  [2]=>
  array(5) {
    [0]=>
    string(30) "shiny-ash-hat-pikachu-459x600."
    [1]=>
    string(30) "shiny-ash-hat-pikachu-459x600."
    [2]=>
    string(30) "shiny-ash-hat-pikachu-138x180."
    [3]=>
    string(30) "shiny-ash-hat-pikachu-314x410."
    [4]=>
    string(22) "shiny-ash-hat-pikachu."
  }
  [3]=>
  array(5) {
    [0]=>
    string(3) "png"
    [1]=>
    string(3) "PNG"
    [2]=>
    string(3) "jpg"
    [3]=>
    string(4) "JPEG"
    [4]=>
    string(4) "jpeg"
  }
}

Желаемый вывод

$img_tag = '<img class="ezlazyload aligncenter size-large wp-image-473313" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22459%22%20height%3D%22600%22%3E%3C%2Fsvg%3E" alt="shiny-ash-hat-pikachu" width="459" height="600" data-ezsrc="https://cdn.gamerant.com/wp-content/uploads/shiny-ash-hat-pikachu-459x600.png" data-ezsrcset="https://cdn.gamerant.com/wp-content/uploads/shiny-ash-hat-pikachu-459x600.PNG 459w, https://cdn.gamerant.com/wp-content/uploads/shiny-ash-hat-pikachu-138x180.jpg 138w, https://cdn.gamerant.com/wp-content/uploads/shiny-ash-hat-pikachu-314x410.JPEG 314w, https://cdn.gamerant.com/wp-content/uploads/shiny-ash-hat-pikachu.jpeg 640w">';

preg_match_all('/(https:\/\/cdn.gamerant.com\/wp-content\/uploads\/)(.+?\.)(png|jpg|jpeg|JPEG|PNG|JPG)/s', $img_tag, $matches1, PREG_PATTERN_ORDER);

var_dump($matches1[0]);

Для желаемого результата вы можете просто var_dump($matches1[0]);:

array(5) {
  [0]=>
  string(77) "https://cdn.gamerant.com/wp-content/uploads/shiny-ash-hat-pikachu-459x600.png"
  [1]=>
  string(77) "https://cdn.gamerant.com/wp-content/uploads/shiny-ash-hat-pikachu-459x600.PNG"
  [2]=>
  string(77) "https://cdn.gamerant.com/wp-content/uploads/shiny-ash-hat-pikachu-138x180.jpg"
  [3]=>
  string(78) "https://cdn.gamerant.com/wp-content/uploads/shiny-ash-hat-pikachu-314x410.JPEG"
  [4]=>
  string(70) "https://cdn.gamerant.com/wp-content/uploads/shiny-ash-hat-pikachu.jpeg"
}
...