Нужна помощь в написании регулярного выражения

gizmaz

Новичок
Нужна помощь в написании регулярного выражения

День добрый,
Делал прогу по переносу нтмл файлов с домашнего сервака на сервер провайдера столкнулся с регуляркой...

есть вот такие куски текста
</DIV><img class=text src="text/pricol/pict/pricol1.gif"><hr class=text>

при переносе мне надо заменить путь к картинкам чтобы стало вот так

</DIV><img class=text src="text/555/08112008/pricol1.gif"><hr class=text>

написал вот такое выражение..
$text = "</DIV><img class=text src=\"text/pricol/pict/pricol1.gif\"><hr class=text>";
echo $text;
$zamena = "text/$category/$today/";
echo preg_replace ('/(text\/)(.*)([a-z0-9])(.gif)/', $zamena, $text);

но проблема что имя самого файла pricol1.gif отрезается... а как его запихать обратно непойму..
помогите советом...

Спасибо.
 

zerkms

TDD infected
Команда форума
$1, $2, ...

ps: ты бездумно пользуешься скобками (). точнее - не понимаешь зачем они нужны, но обрамляешь ими части регулярки.
 

gizmaz

Новичок
скобки насколько я понял разделяют регулярку на части при обработке..
$zamena = "$category/$today/\$2";

echo preg_replace ('/(text\/)(.*)([a-z0-9])(.gif)/', $zamena, $text);

$2 = pricol/pict/pricol
$3 = 1.gif

а как отделить именно имя файла после последнего слеша ну никак непойму...

подскажите пожаолуйста как написать, совсем запутался..
 

gizmaz

Новичок
Получилось вот так...
вроде работает... если чтото не так пишите - мне интересно знать свои косяки...

$text = "div class=text src=\"text/pricol/pict/prico555.gif\"><hr class=text>";
echo $text;
$zamena = "text/$category/$today/\$4$5";

echo preg_replace ('/(text\/)(.*)(\/)(\w+)(.gif)/', $zamena, $text);
 

Bitterman

Новичок
Объясни, зачем ты вставляешь такое безумное количество круглых скобок в свое выражение. Судя по тому примеру, который ты написал, тебе нужна только одна пара. А у тебя их пять.
 

Ralph

Дикий столяр
Ну,может,человек думает,что это такая же обязательная вещь,как обрамление аргументов при вызове функции :)
 

gizmaz

Новичок
ну во первых так гораздо нагляднее ;)) иначе это на вид - бред из набора символов, который может набрать мой сын 2-х лет отроду, колбася ручками по клавиатуре ;)
.............

столкнулся тут со следующей задачей, в html файле что я перетаскиваю несколько картинок, которые помимо изменения пути тоже надо перетащить как файлы...
сделал аналогичный поиск для копирования файлов.
$text = "
некоторый текст
div class=text src=\"text/pricol/pict/prt565.gif\"><hr class=text>
некоторый текст
div class=text src=\"text/pricol/pict/prico9879t.gif\"><hr class=text>
некоторый текст
div class=text src=\"text/pricol/pict/pricgtggt.gif\"><hr class=text>
некоторый текст
";
preg_match ('/(text\/)(.*)(.gif|.jpg)/', $text, $out)

echo "<pre>";
print_r ($out);
echo "</pre>";

но почему-то в массиве оказывается тока первая картинка...
Array
(
[0] => text/pricol/pict/prt565.gif
[1] => text/
[2] => pricol/pict/prt565
[3] => .gif
)


как получить все ? можно конечно разобрать загнав файл в массив.... но раз уж пошли регулярки, может можно и ими ?
 

Bitterman

Новичок
ну во первых так гораздо нагляднее ) иначе это на вид - бред из набора символов, который может набрать мой сын 2-х лет отроду, колбася ручками по клавиатуре
Бред - это вставлять в выражение служебные символы для "наглядности". У каждого из них есть свое предназначение и использовать их нужно только в соответствии с ним.
как получить все ?
http://ru2.php.net/preg_match
В мануале написано, что возвращает данная функция и как получить то, что нужно тебе.
 

gizmaz

Новичок
нашел preg_match_all
Делает то что надо ;)

Скобки убирать пытаюсь.. пока безрезультатно, формула разваливается и не работает...

эксперементирую тут...
http://www.pcre.ru/eval/
 

Bitterman

Новичок
Скобки убирать пытаюсь.. пока безрезультатно, формула разваливается и не работает...
Помимо убирания скобок надо еще и подкорректировать ссылки вида $n в выражении замены.
 
Сверху