Знатокам регулярных выражений

ArseNic

Новичок
Знатокам регулярных выражений

Проблема в следующем есть текст в нем встречается просто русский текст + теги <img src="что то тут" alt="что то там"> их количество можент быть различным (от 1 до 5 допустим)
Нужно сделать след:
оставить весь текст
оставить только первый встретившийся тег <img src="что то тут" alt="что то там">
и в нем заменить "что то тут" на "где-то там"

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

WP

^_^
Отвечает Александр Друзь.
> оставить весь текст
Если правильно понял, всё это одна и та же задача.
> оставить только первый встретившийся тег <img src="что то тут"
PHP:
echo preg_replace_callback('~<img([^>]+)>~',create_function('$m',
'static $j; $m[1] = preg_replace(\'~src=([\\\'"]).*?\1~\',\'src="replacement"\',$m[1]); return $j++ > 0?\'\':\'<img\'.$m[1].\'>\';'),$text);
// text <img src="replacement" alt="что то там">
PHP FAQ: Регулярные выражения. читай =)

-~{}~ 05.06.06 12:49:

p.s. свой код все-таки приведи, не бойся - никого не собьешь.
 

ArseNic

Новичок
о это почти что надо... единственное как это переделать так что бы заменялось в
<img src="что то тут" alt="что то там">
на
<img src="где-то там?img=что то тут" alt="что то там"/>
+ если src="что то тут" написано без кавычек src=что то тут, то замена должна тоже происходить

PS
Я знаю рег выражения на нач уровне, а вот твоя конструкция мне ужасно не понятна.

<?php
$finished_text = preg_replace("/<img\s+src=[\"]?(.*?)[\"]?>/i", '<img src="_test/resize_img.php?img=$1" alt="Fishka" />', $finished_text);
?>
Вот как я делал но только замену
 

WP

^_^
Берем дополнительную минуту :D
Тем не менее конструкция простая очень. [m]preg_replace_callback[/m] ищет шаблон и заменяет тем что вернула callback-функция. Функция в свою очередь заменяет src=... и смотрит сколько уже замен было, если больше 0, то возвращает пустую строку.
Мыслишь в правильном направлении.
 

ArseNic

Новичок
preg_replace_callback разобрался - спасибо. но как довести мою задачу до конечного варианта не пойму
 

WP

^_^
Я ж тебе уже всё разжевал =) Разбирайся по примеру, экспериментируй, если я за тебя напишу, ты ничему не научишься.
 

WP

^_^
Это не шаблон, а пхп-код строки содержащей шаблон: ~src=(['"]).*?\1~. На словах: ищем все вхождения src после которых идет символ который может быть одинарной или двойной ковычкой (записываем его в карман 1), после него идет 0 и более любых символов, и затем идет карман 1 (т.е. \1, мы его запоминали).
Вся подстрока которая выделеная под шаблон заменяется на src="replacement".
 

ArseNic

Новичок
Так все отличноь понял но вот почему ты используешь символ ~ я вот думал что ограничитель регулярного выражения это /

И еще вопросик:
~src=(['"]).*?\1~ вот смотри как - .* означаеть любые символы в количестве от нуля и более типа [.]{0,} этого что то
но вот знак вопроса зачем потом????
ТО есть что значить .*?
 

WP

^_^
ArseNic
Потому что мне так нравится :) '?' означает что .* не жадное. И .* закончится до первого же \1.
 
Сверху