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

tf

крылья рулят
помогите доделать регулярное выражение с отрицанием

никак не выходит доделать
PHP:
$value="[b style='']Код кнопки (88х31):[/b]
[b style='']Код кнопки (88х31):[/b]";
$value=preg_replace("'\[\s*b([^\]]*)\](.*)(?<![/b])\[\s*/\s*b([^\]]*)\]'si",
"<b\$1>\$2</b\$3>",$value);
echo $value;
вместо обработчки всех тегов выдает <b style=''>Код кнопки (88х31):[/b]
[b style='']Код кнопки (88х31):</b>
как понял проблема в обработке отрицания (.*)(?<![/b]) или (.*)(?<!\[/b\]). но никак не могу ее решить
 

white phoenix

Новичок
Не выражение, а помойка.... там где сейчас (.*) сделай (.*?), чтобы изменить жадность. Либо модификатор U.
PHP:
$value = "[b style='']Код кнопки (88х31):[/b] 
[b style='']Код кнопки (88х31):[/b]"; 
$value = preg_replace('~\[\s*b([^\]]*)\](.*?)(?<![/b])\[\s*/\s*b([^\]]*)\]~si','<b$1>$2</b$3>',$value); 
echo $value;
// <b style=''>Код кнопки (88х31):</b> 
// <b style=''>Код кнопки (88х31):</b>
 

tf

крылья рулят
white phoenix спасибо про U как раз и забыл - пару часов бился)
>>Не выражение, а помойка
как умею так и делаю. не слишно уж я много в них знаю
 

white phoenix

Новичок
И на будущее... новичкам для отладки [m]preg_replace[/m] советую использовать [m]preg_match_all[/m], чтобы видеть что именно забирают подмаски.
 

tf

крылья рулят
white phoenix учтем. хотя не так уж я и маленький
к томуже ты помоему уже это говорил а я опять забыл)))
 

white phoenix

Новичок
tf
Жадность бросается в глаза... за эти пару часов мог бы и документацию прочесть :) Говорил, говорил... только толку...
 

tf

крылья рулят
white phoenix да читал я ее но так и не понял смысла
'Этот модификатор инвертирует жадность квантификаторов, таким образом они по умолчанию не жадные'
сразу так и нападать если я не понял
 

white phoenix

Новичок
tf
> да читал я ее но так и не понял смысла
Тут ничего сказать не могу, у всех разный понятийный аппарат.
> 'Этот модификатор инвертирует жадность квантификаторов, таким образом они по умолчанию не жадные'
Ты ведь используешь неявно заякореный шаблон замены (нет ^ и $), и (.*) может скушать лишнее.
Т.е. при обработке
[b style='']Код кнопки (88х31):[/b]
[b style='']Код кнопки (88х31):[/b]
сопоставляет с [b style=''], и затем идет (.*), и эта подмаска берет на себя
Код кнопки (88х31):[/b]
[b style='']Код кнопки (88х31):
Ну и результат понятен. Чтобы такого не было настраивай жадность.
> сразу так и нападать если я не понял
Никто не нападал :)
 
Сверху