preg_replace заменить /uploads/.resized_X1xX2_img_name на /uploads/img_name

volhovec

Новичок
preg_replace заменить /uploads/.resized_X1xX2_img_name на /uploads/img_name

есть строка вида /uploads/.resized_X1xX2_img_name
где X1 и X2 размеры картинки, img_name ее имя,
ни того ни другого мы не знаем, т.к. имя проставляется визивингом
нужно преобразовать это дело к виду: /uploads/img_name
чтобы проставить линк на полнорозмерное изображение
помогите плиз, просто даже не знаю с какого бока подлезть (маны читал, но как то не помогло)
 

kruglov

Новичок
function func($m){
echo "Found: ";
var_dump($m);
echo "<br>";
return $m[0];
}

$text='<img src="xxx.jpg">';

preg_match_callback('~<img.+?src="(.+?)".*?>~si', $text, 'func');
 

volhovec

Новичок
заменить на сервере (замена перед инсёртом в бд)
js не пойдёт, т.к. там xinha хитро всё генерит, я так и не успел поймать момент где она создает сам img
я написал так:
$href = preg_replace("(/uploads/)(\.resized_)([0-9]*)(_x_)([0-9]*)(_[a-zA-Z0-9]*)","\1\5",$out[1][0]);
но он ругается:
Warning: preg_replace() [function.preg-replace]: Unknown modifier '('
 

volhovec

Новичок
непонятно почему на
$href = preg_replace('/(\/uploads\/)(\.resized_)([0-9]*)(_x_)([0-9]*)(_[a-zA-Z0-9]*)/',"$1$6",$href);
$replace_to[$k] = "<a href=\"".$href."\" target=\"_blank\">".$replace_elements[$k]."</a>";

мне на принт_р выдает <a href="/uploads/.resized_300x225_img_2166.jpg" target="_blank"><img height="225" width="300" src="/uploads/.resized_300x225_img_2166.jpg" alt="img_2166" title="img_2166" /></a>

а не <a href="/img_2166.jpg" target="_blank"><img height="225" width="300" src="/uploads/.resized_300x225_img_2166.jpg" alt="img_2166" title="img_2166" /></a>

а регексп я уже читал, т.к. до этого у меня их 2 идет... и оба работают
 

kruglov

Новичок
Ой, простите, не знал, что вы опытный регекспописатель, что у вас их уже 2 рабочих есть.

До этого, кстати, слешей в начале и конце выражения что-то не было и жалобы другие были.

А вообще, на самом деле вы в верном направлении движетесь, чтобы не морочиться с \/, узнайте, что ограничивать регулярное выражение можно любыми символами, ~~ или ##

Вот только не понял телодвижений с $k.
 

volhovec

Новичок
я выкинул последнюю версию, что было в коде то и есть
и глумиться тут не надо...
а \/ я беру чтобы слэш закоментить...
а выглядит на данный момент все так:
if (strstr($_POST['txt_text'],".resized_"))
{
preg_match_all('|<img(.*)>.*|siU', stripslashes($_REQUEST['txt_text']), $out);
echo "<pre>";
print_r($out[1]);
echo "</pre>";
if (count($out[1])>0)
{
$replace_elements = array();
$replace_to = array();
foreach ($out[1] as $k=>$v)
{
$replace_elements[$k] = "<img".$v.">";
preg_match_all('|.* src=\"(.*)\".*|siU', $v, $out2);
$href = $out2[1][0];
$href = preg_replace('/(\/uploads\/)(\.resized_)([0-9]*)(_x_)([0-9]*)(_[a-zA-Z0-9]*)/',"$1$6",$href);
$replace_to[$k] = "<a href=\"".$href."\" target=\"_blank\">".$replace_elements[$k]."</a>";
}
}
echo "<pre>";
print_r($replace_elements);
echo "</pre>";

echo "<pre>";
print_r($replace_to);
echo "</pre>";
}
exit();
но "то что не нужно" не удаляется... вот в чем косяк
 
Сверху