Как preg_match_all изображения с шириной головы http> 100px и высотой> 80px? - PullRequest
0 голосов
/ 28 февраля 2011

Я хочу сопоставить все img s, которые:

  1. У одного из расширений: jpg | png | gif
  2. Чьи src не начинаются с http://
  3. Чья ширина> 100 и высота> 100

Я начал с этого регулярного выражения:

preg_match_all("/(href|src)=([\"|']?)([^ \"'>]+\.(jpg|png|gif))\\2/i",$str,$matches);

1 Ответ

1 голос
/ 28 февраля 2011

Числовые сравнения в регулярных выражениях не так просты, и поиск атрибутов width = и height = потребовал бы более сложного регулярного выражения. См. regex tools

Следовательно, это один из случаев, когда имеет смысл использовать более простой анализатор HTML. Например, с QueryPath вы можете использовать:

foreach (qp($html)->find("img, a") as $img) {
    if ($img->attr("width") >= 100 and ...) {
        echo $img->attr("src"), $img->attr("href");
    }
}

Конечно, использование DOMDocument будет быстрее (а также больше печатать ..)

...