我有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) {
中对其进行检查的内容
答案 0 :(得分:2)
正则表达式或其他直接字符串方法不是解析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>";
}
答案 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]