2013-03-28 4 views
0

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

Соответствующие файлы все не начинаются с XX-XX-XX (по крайней мере, одно целое, но не более чем два, с подчеркивания разделения трех чисел)

Я использовал txt2re создать это:

$txt='1-2-3'; 

    $re1='(\\d+)'; # Integer Number 1 
    $re2='(-)'; # Any Single Character 1 
    $re3='(\\d+)'; # Integer Number 2 
    $re4='(-)'; # Any Single Character 2 
    $re5='(\\d+)'; # Integer Number 3 

    if ($c=preg_match_all ("/".$re1.$re2.$re3.$re4.$re5."/is", $txt, $matches)) 
    { 
     $int1=$matches[1][0]; 
     $c1=$matches[2][0]; 
     $int2=$matches[3][0]; 
     $c2=$matches[4][0]; 
     $int3=$matches[5][0]; 
     print "($int1) ($c1) ($int2) ($c2) ($int3) \n"; 
    } 

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

+1

Я не уверен, что вы пытаетесь сделать здесь. Вам нужен булевский тест или что-то еще? В любом случае правильное регулярное выражение будет '^ \ d {1,2} - \ d {1,2} - \ d {1,2}'. – Jon

ответ

1

Вы можете использовать

"/^\d\d?-\d\d?-\d\d?/" 

Если цифры разделены подчеркиванием использовать _ вместо -.

1

Вы можете объединить все вместе при объявлении.

$txt='1-2-3'; 

$re = '/(\d+)-(\d+)-(\d+)/is'; 

if ($c=preg_match_all ($re, $txt, $matches)) 
{ 
    $int1=$matches[1][0]; 
    $int2=$matches[2][0]; 
    $int3=$matches[3][0]; 
    print "($int1) (-) ($int2) (-) ($int3) \n"; 
} 

Обратите внимание, что я удалил группировку вокруг -, поскольку те, остаются постоянными. Вы можете пройти через это регулярное выражение шаг за шагом на Debuggex.

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