2014-09-04 2 views
0

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

Это мой код:

opendir($dh, $_[0]) || die "Can't open folder!"; 
while(($filename = readdir($dh))){ 
    if ($filename =~ /..*\...*/) {...}} 

Идея этого регулярного выражения является то, что он требует, по крайней мере один символ до и после точки. Я тестировал это выражение (без «/» в начале и в конце) в онлайн-тестировщике регулярных выражений perl, и он работал, однако на самом деле условие всегда возвращает false.

Что я делаю неправильно? Спасибо

+2

Должно работать, пожалуйста, укажите некоторые имена файлов, которые не совпадают. – Toto

+1

Выражение работает, но вы должны написать '.. *' как '. +'. '+' означает «одно или несколько повторений» в PCRE. –

+2

почему нет /.\../? – glezmen

ответ

4

Если ваши файлы не соответствуют специальному соглашению, вы не можете различать файлы и папки, просто просматривая имена. Вы можете использовать -d, чтобы проверить, является ли путь папкой (см. here).

Смежные вопросы