Задать вопрос
@IvanMogilev
Backend developer: Wordpress,Yii

Как вырезать цифры с нижними подчеркиваниями?

Добрый день, имеются несколько типов названий файлов, например - 302_pp_kamenno_seriy_brown.jpeg ,yasen_beliy_523_2.jpg,bej_yasen_beliy_601.jpeg

Нужно цифры и если дальше есть нижние подчеркивания, а потом опять цифры - то и их, перенести в начало строки. Нужна помощь в составлении регулярки, или может это можно сделать проще по другому, на данный момент пришел к коду
<?php

if ($handle = opendir(dirname(__FILE__) . '/photo')) {
    while (false !== ($fileName = readdir($handle))) {
        
            preg_match('/(\\d+)_/', $fileName, $match);
            if(!empty($match)  )
            {
                foreach ($match as $item)
                {
                    if (stripos($item,"_"))
                    {
                        print_r($item);
                        echo "\n";
                    }
                }
            }
    }
    closedir($handle);
}
?>

но он вырезает только цифры с нижним подчеркиванием, если делать регулярку вида - '/(\\d+)_(\\d+)/' то не вырезает просто 601. Заранее спасибо
  • Вопрос задан
  • 194 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 2
delphinpro
@delphinpro Куратор тега PHP
frontend developer
не люблю регулярки =)
не лучшее решение, но вроде работает https://regex101.com/r/jG5UuA/1
Ответ написан
@JohnDidact
Нуб во всём
С preg_replace было бы меньше кода. Да и использовалось бы это по назначению…

$old = 'ej_yasen_beliy_601.jpeg';
$new = preg_replace('#^(.*?)_(\d+(?:_\d+)*)(\.[a-z]+)$#is', '$2_$1$3', $old);
if($new == $old){
 print("ничего нового\n");
}else{
 print("было {$old}, стало {$new}\n");
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы