2016-09-23 2 views
0

Я использую ниже код для чисел вытяжных и имя файла строк с проблемой стандартизацииRegex для чисел экстракта и расширение строки

30183308__90_.jpeg 
30193253-(100).jpg 
30193253__100__.jpg 
30193253_ _100_ _.jpg 

Используйте эту функцию

public function refactorFileName($filename) 
{ 
    $array = preg_split("/[^A-Za-z0-9]/", $filename); 
    foreach($array as $key => $value) { 
     if($value == "") { 
      unset($array[$key]); 
     } 
    } 
    $array    = array_values($array); 
    $standardFilename = $array[0].'.'.$array[2]; 
    $indexFile   = $array[1]; 

    return compact("indexFile","standardFilename"); 
} 

$filename = '30193253_ _100_ _.jpg'; 
extract(refactorFileName($filename)); 
echo "New File name -> ".$standardFilename.PHP_EOL; 
echo "Index for file -> ".$indexFile.PHP_EOL; 

Это шоу (правильный):

New File name -> 30193253.jpg 
Index for file -> 100 

Я думаю, что есть лучший код для выражения регулярных выражений.

EDIT: Возможно, что код лучше на preg_split или лучший код вообще для этого вопроса?

+1

Что вы подразумеваете под «лучше»? легче читать/понимать, улучшать производительность и т. д.? – bassxzero

+0

Итак, это рабочий код, и вы просто спрашиваете, как его улучшить? –

+0

Да. Я думаю, что лучший способ сделать код. Особенно в регулярном выражении, используемом в preg_split. ИМХО. – abkrim

ответ

1

Две вещи: 1) Это будет проще, если вы поместите квантификатор в свой узор (чтобы избежать бесполезного foreach после). (Обратите внимание, что preg_split также имеет опцию PREG_SPLIT_NO_EMPTY, чтобы избежать пустых предметов.)
2) иногда слишком много многословия убивает многословие.

Вы можете переписать это так:

function refactorFileName($filename) { 
    $p = preg_split('~[\W_]+~', $filename, 3); 

    return [ 'indexFile' => $p[1], 'standardFilename' => "$p[0].$p[2]" ]; 
} 

Или, если вы хотите быть более многословен:

function refactorFileName($filename) { 
    list($name, $index, $ext) = preg_split('~[\W_]+~', $filename, 3); 

    return [ 'indexFile' => $index, 'standardFilename' => "$name.$ext" ]; 
} 

(Как и в сторону, когда у вас уже есть рабочий код, обратитесь к своему вопрос о codereview вместо SO)

+0

Спасибо. Завтра испытайте этот путь. Оцените для подсказки PREG_SPLIT_NO_EMPTY (я забыл) – abkrim

+0

Протестировано. Благодарим вас за понимание моего вопроса и прилагаем усилия, чтобы помочь. – abkrim

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