2010-05-31 6 views
0

У меня есть небольшой фрагмент кода, который мне нужно взять с ereg в preg_match. Вот код.Еще одно исправление php ereg

function be_file_list($d, $x) { 
    foreach (array_diff(scandir($d), array('.', '..')) as $f) { 
     if (is_file($d . '/' . $f) && (($x) ? ereg($x.'$',$f) : 1)) { 
      $l[] = $f; 
     } 
    } 

    return $l; 
} 

Этот код работает, как ожидалось, даже если он не выглядит слишком симпатичный (источник: http://www.php.net/manual/en/function.scandir.php)

но EREG устарела, я действительно хотел бы сделать это preg_match, или что-то подобное ,

Я уже возился с этим днем, и компьютер собирается выйти из окна. Я бы подумал, что

preg_match("/"$x.'$',$f"/") 

работал бы, но не кубиками.

Любая помощь будет отличной.

Приветствие Бен

+2

Вы не шутите о «маленьком куске». Есть еще две или три новых строки, которые вы могли бы вынести, чтобы максимизировать нечитаемость. –

ответ

1

У вас есть все это неправильно ... попробуйте

preg_match('/'.preg_quote($x, '/').'$/', $f) 

Вы писали:

preg_match("/"$x.'$',$f"/") 

Вам нужны . сек между строками и vars, и у вас есть своя косая черта в неправильном месте. Это должно быть после шаблона, а не после темы.

0

Похоже, glob - вещь, которую вы ищете. Сочетание как чтения каталогов, так и регулярных выражений

+0

'glob' does ** ** не использует регулярные выражения. – salathe

+0

@salathe хорошо вид. достаточно для цели ОП –