xml — преобразование PHP eregi в preg_match, как мне это сделать?

Я новичок в регулярных выражениях, но у меня нет времени, чтобы изучить его,
все же мне нужно конвертировать 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++;
}

-3

Решение

+ Изменить 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 заявления, так как они плохи для хорошей структуры кода, потому что у вас нет четкого представления о том, почему они там, когда вы смотрите на код.

0

Другие решения

преобразованный preg_match может выглядеть следующим образом.

if (preg_match("/\^|\.\.|\?|\$.*/", $file)) {
continue;
}

PS: я использовал для тестирования этого сайта. https://regex101.com/

0

По вопросам рекламы [email protected]