$nomadspage = "http://www.nomads.ncep.noaa.gov/pub/data/nccf/com/gfs/prod/";
$html = file_get_contents($nomadspage);
$count = preg_match_all('/<a href="([^"]+)">[^<]*<\/a>/i', $html, $files);
unset($files[1]); //deletes repeat array from preg_match
$files = $files[0]; //deletes container array from preg_match
foreach ($files as $key => $value) {
if (substr($value, 0, 3) !== "gfs") {
unset($files[$key]);
}
}
var_dump($files);
我有一个包含HTTP目录中文件名的数组。我想过滤这些文件名,以便从数组中删除所有不以三个字母gfs
开头的文件。但是,由于某种原因,substr()
功能不起作用。它不会从文件名中提取子字符串。因此,if
语句不起作用。有谁知道为什么会这样,以及如何解决它?
答案 0 :(得分:3)
$files[0]
包含与整个正则表达式匹配的字符串,因此substr($value, 0, 3)
始终为"<a "
。您应该将$files
设置为$files[1]
,而不是$files[0]
,它包含([^"]+)
模式的所有匹配项。
实际上,最好不要使用正则表达式来解析HTML。使用DOM解析器库,例如DOMDocument
类。