регулярные выражения Ай нид хелп!

Табаков

Новичок
регулярные выражения Ай нид хелп!

Друзья!

Нужна ваша помощь.
есть такая штука

$field = "C:\Documents and Settings\t-mac\Мои документы\Мои рисунки\1126534976.jpg";

и есть регулярное выражение

$field = preg_replace("/(?:file\:)?\w\:.*([^\/]+?\.(?:gif|jpg|png|bmp|tiff))/im",'edit_img/\1',$field);

должно получиться
токого вида

edit_img/1126534976.jpg

а получается

edit_img/6.jpg

-----------------
как смастерить регулярное выражение
чтоб оно сохраняло имя файла целиком а не последний символ?
 

Табаков

Новичок
Спасибо

Вообще выглядит так:

<IMG src="C:\Documents and Settings\t-mac\Мои документы\Мои рисунки\1126534976.jpg">
<IMG src="C:\Documents and Settings\t-mac\Мои документы\Мои рисунки\1126535676.jpg">
 

zarus

Хитрожопый макак
PHP:
$field = preg_replace('/(?:file\:)?\w\:.*\\([^\/\\]+?\.(?:gif|jpg|png|bmp|tiff))/im', 'edit_img/\1', $field);
 

ksnk

прохожий
zarus
Форум неслабо чудит... В этом случае разумнее не оформлять код в тегах кода :)
 

white phoenix

Новичок
PHP:
$string ='<IMG src="C:/Documents and Settings/t-mac/Мои документы/Мои рисунки\1126534976.jpg">
<IMG src="C:\Documents and Settings\t-mac\Мои документы\Мои рисунки\1126535676.jpg">';
function mycallback($matches) {return 'src="edit_img/'.basename($matches[1]).'"';}
echo preg_replace_callback('~src="(.*)"~i','mycallback',$string);
/*
<IMG src="edit_img/1126534976.jpg">
<IMG src="edit_img/1126535676.jpg">
*/
 

zarus

Хитрожопый макак
Кстати, я разочаровался в регулярных выражениях :(
PHP:
$begin = strpos(...);
$end = strpos(...,$begin);
$data = substr(...,$begin,$end-$begin);
работает быстрее... хотя и не так удобно уже...
 

ksnk

прохожий
PHP:
$field ='<IMG src="C:/Documents and Settings/t-mac/Мои документы/Мои рисунки\1126534976.jpg">
<IMG src="C:\Documents and Settings\t-mac\Мои документы\Мои рисунки\1126535676.jpg">';

$field = preg_replace('[\/\\\\]([^\/\\\\]+.(?:gif|jpg|png|bmp|tiff))@im','edit_img/\1',$field);
echo $field ;
Филосовский вопрос... Можно ли разочароваться, в том, что недостаточно понимаешь :))
 

white phoenix

Новичок
zarus
> Кстати, я разочаровался в регулярных выражениях
Почему?
> работает быстрее...
Очевидно. Всегда за удобство платим скоростью.
ksnk
А где символ начала выражения? Хотя сразу видно что не то.

Imho, в данном задаче надо искать src, а не просто ссылку.
 

zarus

Хитрожопый макак
Оригинал:
Код:
<IMG src="C:/Documents and Settings/t-mac/Мои документы/Мои рисунки\1126534976.jpg">
Превращаем в регулярное выражение:
Код:
<img src=".*\\(.*(?:gif|jpg|png|bmp|tiff))">
Затем заменяем через preg_replace на
Код:
<img src="edit_img/\1">
В результате получаем:
Код:
<img src="edit_img/1126534976.jpg">
 

Табаков

Новичок
сервак до обработки выдает
<P><IMG src=\"C:\\Documents and Settings\\t-mac\\Мои документы\\Мои рисунки\\1126534976.jpg\"></P>

как лишние слеши убрать?
 

zarus

Хитрожопый макак
или применять на строку stripslashes, чтобы не повредить логику кода (если она там есть ^_^)
 

ksnk

прохожий
white phoenix
Это я отредактировал его так неудачно :( Видимо руки дрожали от встречи с новым Годом ... :)
В оригинале, который у меня работает было так
PHP:
$field = preg_replace('@(?:file:)?\w\:.*[\/\\\\]([^\/\\\\]+.(?:gif|jpg|png|bmp|tiff))@im','edit_img/\1',$field);
 
Сверху