Отправляет email-рассылки с помощью сервиса Sendsay

[TC] Регулярные выражения: убрать все нецифровые символы

Vande omentaina, Tiflocomp!
Как всегда ощущаю себя полнейшей бездарью...
Простейшая задачка: есть папка с фотками. Файлы называются foto1.jpg,
foto25.jpg, foto468.jpg etc.
Задача: вычленить айдишники (цифры) из имени файла.
Отрезать каким-нибудь Substr'ом я могу (видимо, так сейчас и буду
делать). Но порядочные люди пользуют простейший регексп, который бы
удалял из имени всё, что не цифра. Пробовал уже много всякого и
доковырял вот до этого:
$PhotoId=preg_replace ("!^[(.+?)(\d+)(.+?)]$!", "$2", $file);
Что не так?
Спасибо!

Ответить   Anarendil Sun, 2 Aug 2009 00:35:56 +0300 (#890826)

 

Ответы:

Vande omentaina, все!

Конечно, я её таки решил, выкрутившись одной строкой:
$PhotoId=substr($file, 4, -4);
Однако регексп был бы всё равно интересен.

Ответить   Anarendil Sun, 2 Aug 2009 13:02:14 +0300 (#890874)

 

Андрей, доброго вам здоровья!

Сначала переформулируем задачу: не вычленить все не цифровые символы, а
наоборот, вычленить все цифровые символы перед точкой. Теперь можно
приступать:

eregi("[0-9]+\\.", $str, $pock)
или
eregi("[[:digit:]]+\\.", $str, $pock)

Причем, извлекать результат будете из $pock[0].

С уважением,
Грызунов Александр. Самара.

Ответить   "eastreb" Mon, 3 Aug 2009 01:41:49 +0400 (#890967)

 

Андрей, еще раз здравствуйте!

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

С уважением,
Грызунов Александр. Самара.

Ответить   "eastreb" Mon, 3 Aug 2009 01:55:39 +0400 (#890982)

 

Приветствую всех.
Андрей пишет:

Следите за регистром букв (предполагается, что у вас последовательность цифр
-- это всегда номер фотографии):
$photo_id = preg_replace("/\D/", "", $filename);
Успехов. Анатолий.

Ответить   "i_chay" Mon, 3 Aug 2009 09:02:38 +0500 (#891012)