Я новичок в регулярных выражениях, но у меня нет времени, чтобы изучить его,
все же мне нужно конвертировать eregi («^ ..? $», $ file) в preg_match () но я
не знаю, как это сделать, кто-нибудь может мне помочь?
Также дать мне немного понимания того, как это работает
хорошо бы иметь 🙂
Кусок кода:
$fileCount = 0;
while ($file = readdir($dh) and $fileCount < 5){
if (eregi("^..?$", $file)) {
continue;
}
$open = "./xml/".$file;
$xml = domxml_open_file($open);
//we need to pull out all the things from this file that we will need to
//build our links
$root = $xml->root();
$stat_array = $root->get_elements_by_tagname("status");
$status = extractText($stat_array);
$ab_array = $root->get_elements_by_tagname("abstract");
$abstract = extractText($ab_array);
$h_array = $root->get_elements_by_tagname("headline");
$headline = extractText($h_array);
if ($status != "live"){
continue;
}
echo "<tr valign=top><td>";
echo "<a href=\"showArticle.php?file=".$file . "\">".$headline . "</a><br>";
echo $abstract;
echo "</td></tr>";
$fileCount++;
}
+ Изменить eregi("^..?$", $file)
в preg_match("/^\.\.?$/i", $file)
В eregi вам не нужно было ставить открывающие и закрывающие элементы для регулярных выражений, но с preg вы должны это делать (это две косые черты в начале и в конце).
В основном это регулярное выражение соответствует всем именам файлов, которые начинаются с. и конец там или другой. а затем заканчивается там, чтобы он соответствовал файлам . а также ..
Более быстрый способ сделать это так
$fileCount = 0;
while ($file = readdir($dh) and $fileCount < 5){
if($file != "." && $file != "..") {
$open = "./xml/".$file;
$xml = domxml_open_file($open);
//we need to pull out all the things from this file that we will need to
//build our links
$root = $xml->root();
$stat_array = $root->get_elements_by_tagname("status");
$status = extractText($stat_array);
$ab_array = $root->get_elements_by_tagname("abstract");
$abstract = extractText($ab_array);
$h_array = $root->get_elements_by_tagname("headline");
$headline = extractText($h_array);
if ($status != "live"){
continue;
}
echo "<tr valign=top><td>";
echo "<a href=\"showArticle.php?file=".$file . "\">".$headline . "</a><br>";
echo $abstract;
echo "</td></tr>";
$fileCount++;
}
}
Вы хотите попытаться избежать использования continue
а также break
заявления, так как они плохи для хорошей структуры кода, потому что у вас нет четкого представления о том, почему они там, когда вы смотрите на код.
преобразованный preg_match может выглядеть следующим образом.
if (preg_match("/\^|\.\.|\?|\$.*/", $file)) {
continue;
}
PS: я использовал для тестирования этого сайта. https://regex101.com/