Det uppstod dock ett annat problem, när jag gjorde på detta sätt.
[ b ] lite fet text [/ b ] lite text som inte är fet [ b ] mer fet text [/ b ]
ersätts nu med:
<b> lite fet text [/ b ] lite text som inte är fet [ b ] mer fet text </b>
Vilket blir jättetokigt. Verkar som att den går igenom från både vänster och höger istället för att börja vid första taggen och sedan sluta när den når nästa.
Satta pa greedy matchning. Detta varierar beroende pa vilken variant det handlar om
Sedan bor du anvanda detta uttryck for att matcha valfritt tecken: [^[]* alt detta [^\[]* (Hakparentesen ar escapad, kan behovas.)
Detta uttryck tillater inte nastlade taggar, men jag tror att det ar en bra borjan for dig.
/g är inte greedy, /g är ersätt alla. * är greedy, *? är o-greedy. * eller *? spelar ingen roll med [^[] eftersom den då kommer att fastna på första möjliga [ i båda fallen. Byter man ut [^[] till [\s\S] så krävs o-greedy för att det ska funka. Alltså är [^[] bättre, eftersom det inte är alla tecken som ska matchas, utan alla utom [.
Oj oj, många svar av delade meningar. Jag försökte sätta greedy genom att skriva g efter # men då försvann allt så jag tog bort det och körde med [^[]* bara och det verkar fungera:
$content = preg_replace('#\[ b ]([^[]*)\[/ b ]#i','<b>\1</b>',$content);
$content = preg_replace('#\[ i ]([^[]*)\[/ i ]#i','<i>\1</i>',$content);
Detta verkar fungera för alla fall jag lyckats komma på:
[ b ]fett[/ b ]
[ b ]fett[/ b ] ofett [ b ] fett
[ b ]fett[/ b ] ofett men [ i ] kursivt [/ i ] [/ b ]
[ b ]fett[/ b ] med öppna h[akar [/ b]
Nu var jag nog lite för snabb med att svara igen, hittade ett problem, om man skriver koden i den ordning som jag skrev ovanför så funkar t.ex.
[ i ][ b ]fett & italic[/ b ][/ i ]
men inte
[ b ][ i ]fett & italic[/ i ][/ b ]
då blir den kursiv men [ b ] taggen skrivs ut
$content = preg_replace('#\[ b ]([\s\S]*?)\[/ b ]#i','<b>\1</b>',$content);
$content = preg_replace('#\[ i ]([\s\S]*?)\[/ i ]#i','<i>\1</i>',$content);
264 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25