Найти атрибуты src, содержащие не менее 10 символов - PullRequest
0 голосов
/ 11 июля 2019

У меня работает preg_match_all, который находит все изображения с сайта и получает src.У меня вопрос, как я могу проверить, если $matches имеет более 10 символов

Мой текущий код:

$ch = curl_init('https://www.everypixel.com/search?q=italy&is_id=1&st=free');
$html = curl_exec($ch);
preg_match_all('|<img.*?src=[\'"](.*?)[\'"].*?>|i', $html, $matches);

if (sizeof($matches[1]) >= 10) {
  // something
}

Просто нужно заменить if (sizeof($matches[1]) >= 10) { на что-то, что будет проверять это вpreg_match_all

Ответы [ 2 ]

2 голосов
/ 11 июля 2019

Regex или другие подходы с прямыми строками не являются хорошими инструментами для анализа html. PHP имеет много классов, предназначенных для этого: DOMDocument, DOMXPath, DOMWhatEverYouWant. Вы должны научиться использовать эти классы и манипулировать DOM.

$ch = curl_init('https://www.everypixel.com/search?q=italy&is_id=1&st=free');
$html = curl_exec($ch);

libxml_use_internal_errors(true);
$dom = new DOMDocument;
$dom->loadHTML($html);

$xp = new DOMXPath($dom);

$results = $xp->query('//img/@src[string-length(.)>9]');

foreach ($results as $result) {
    echo $result->nodeValue, "<br>";
}
0 голосов
/ 11 июля 2019

Существует способ установить минимальное и неограниченное количество максимально необходимых символов в регулярном выражении. {10,} означает минимум от 10 и без ограничений, применимых к этому правилу [^ \ '"]

$html = file_get_contents('https://www.everypixel.com/search?q=italy&is_id=1&st=free');
preg_match_all('/<img.*?src=[\'"]?([^\'"\s]{10,})/i', $html, $matches);
// All search lines are in $matches[1]
...