странное поведение preg_replace

proc

Новичок
странное поведение preg_replace

Есть строка $string:

<td><img src="usersimages/1137_1_s.jpg" border="0"></td>
<td><img src="usersimages/1137_2_s.jpg" border="0"></td>

Делаем:

PHP:
$string = preg_replace("|<img([\s\S]+?)usersimages/1137_2_s.jpg([\s\S]+?)>|i","test",$string);
Получаем:

<td>test</td>

А надо:

<td><img src="usersimages/1137_1_s.jpg" border="0"></td>
<td>test</td>

Вопрос:
Что я делаю не правильно?
 

SiMM

Новичок
[m]PCRE[/m]
<img([\s\S]+?)usersimages/1137_2_s.jpg([\s\S]+?)>|i
Поясни смысл выделенного.
PS: вопрос не для продвинутых.
 

proc

Новичок
Автор оригинала: SiMM
[m]PCRE[/m]
<img([\s\S]+?)usersimages/1137_2_s.jpg([\s\S]+?)>|i
Поясни смысл выделенного.

строка может быть
<td><img src="usersimages/1137_1_s.jpg" border="0"></td>
или
<td><img style="xxxx" src="usersimages/1137_1_s.jpg" border="0"></td>

PS: вопрос не для продвинутых.
сорри
 

SiMM

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

proc

Новичок
Автор оригинала: SiMM
Нет смысла в выражении [\s\S] - с таким же успехом можно написать . (насколько я до сих пор думал ;) ).
Самое странное в этой истории, что после такой замены регулярник на тестовом примере работает ожидаемым образом.
Ну хорошо, а почему не работает [\s\S]?
 

MiRacLe

просто Чудо
PHP:
preg_replace('~(.+)(<img.+usersimages/1137_2_s.jpg[^>]+>)(.+)~','\1test\3',$string);
З.Ы. вы таки почитайте всё-таки что-же она(функция) реплейсит.... [m]preg_replace[/m]
 

proc

Новичок
Автор оригинала: MiRacLe
PHP:
preg_replace('~(.+)(<img.+usersimages/1137_2_s.jpg[^>]+>)(.+)~','\1test\3',$string);
З.Ы. вы таки почитайте всё-таки что-же она(функция) реплейсит.... [m]preg_replace[/m]
to MiracLe

Чота не понял?

Вот выдержка из мана:
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit])
Выполняет поиск в строке subject совпадений с шаблоном pattern и заменяет их на replacement....
Если во время выполнения функции были обнаружены совпадения с шаблоном, будет возвращено измененное значение subject....

То есть preg_replace возвращает измененную страку а не только измененные pattern.

Только вопрос не в этом, а в том почему (.+) работает а [\s\S] - нет?
 
Сверху