Кое е по-добре !

dakata__92

Super Moderator
$text = preg_replace("/\[b\](.*?)\[\/b\]/is", '<b>$1</b>',$text);

или

$text = preg_replace("/\[b\](.+?)\[\/b\]/is", '<b>$1</b>',$text);

Ако можете да ми дадете и примери за употреба и възможни гришки ще съм благодарен :)
 
Разликата е че се използват различни метасимволи("*","+") наречени още алчни."*" намира нула или повече съвпадения с предходния сивмол,"+" намира ЕДНО или повече съвпадения с предходния символ в случая метасимвола "." който пък от своя страна намира съвпадение със всеки символ раличен от нов ред.Казано по-просто с .+? задължаваш да има символ между bb tags за да го замени с html таговете:

$text ='';
$text = preg_replace("/\[b\](.+?)\[\/b\]/i", '<b>$1</b>',$text);
echo $text; // няма да се извърши замяна
$text ='d';
$text = preg_replace("/\[b\](.+?)\[\/b\]/i", '<b>$1</b>',$text);
echo $text; // ще се извърши замяна


$text ='';
$text = preg_replace("/\[b\](.*?)\[\/b\]/i", '<b>$1</b>',$text);
echo $text; // ще се извърши замяна
$text ='d';
$text = preg_replace("/\[b\](.*?)\[\/b\]/i", '<b>$1</b>',$text);
echo $text; // ще се извърши замяна

Другия метасимвол "?" намира нула или 1 съвпадение с предходния символ.Тук обаче се използва да ограничи алчността на метасимволите "*","+".Също е важно да се отбележи, че след като си използвал режима(флага) "s" който позволява на метасимвола "." да намира съвпадение и с нов ред то в първия случай с ".+?" ще се намери съвпадение и ако има само нов ред между таговете :


$text ='
';
$text = preg_replace("/\[b\](.+?)\[\/b\]/is", '<b>$1</b>',$text);
echo $text; // ще се извърши замяна заради флага "s"

Гледай сорс кода на страницата за да виждаш какво всъщност става.И както ти казвах преди правиш излишни ескейпвания на символи:

$text = preg_replace("/\[b\](.*?)\[\/b\]/i", '<b>$1</b>',$text);
и
$text = preg_replace("/\(.*?)\[\/b]/i", '<b>$1</b>',$text);

е абсолютно еднаквo, достатъчно е едно ескейпване на метасимволите "[","]" за да може да се развали конструкцията на клас и да се считат за обикновенни символи.
 
Значи по заключението ми е че е по-добре навсякъде да ползвам "+", въпреки, че флага "s" заменя и при празен ред :) За ББкод кое е по-добре, като флаг да се ползва "i","s" или "is" ?
 

Back
Горе