查找至少包含 10 个字符的 src 属性

Find src attributes with at least 10 characters

我正在工作 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

中检查的内容

正则表达式或其他直接字符串方法不是解析 html 的好工具。 PHP 有许多为此设计的 类:DOMDocumentDOMXPathDOMWhatEverYouWant。您必须学习如何使用这些 类 以及如何操纵 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>";
}

有办法在正则表达式中设置最小和无限最大所需字符数。 {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]