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

时间:2019-07-11 19:25:22

标签: php preg-match preg-match-all

我有var fs = require('fs') fs.readdir('/folder/with/files', (err, files) => { if (err) { console.log(err); return; } files.forEach(file => { fs.readFile(file, 'utf8', function (err,result) { if (err) { return console.log(err); } result = //logic; fs.writeFile('/new/file/path',result,'utf8', function (err) { if (err) { return console.log(err); } }); }); }); 在工作,该工作从网站上查找所有图像并得到preg_match_all。我的问题是如何检查src是否超过10个字符

我当前的代码:

$matches

只需将$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) {中对其进行检查的内容

2 个答案:

答案 0 :(得分:2)

正则表达式或其他直接字符串方法不是解析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>";
}

答案 1 :(得分:0)

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