webForumDet fria alternativet

reguljärt uttryck

2 svar · 170 visningar · startad av Nexus86

Nexus86Medlem sedan okt. 20023 030 inlägg
#1

Har lite problem med ett reguljärt uttryck.

$text = eregi_replace("(&lt;c&gt;)([^&][^l][^t][^;][^c])*(&lt;/c&gt;)", "<center>\\\\2</center>", $text);

Meningen är att den ska leta efter alla "<c>någon text</c>" i en sträng som jag använt htmlentities på och som inte innehåller en annan tagg som börjar på c (har nämligen bara den c-taggen). Felet med detta uttryck som jag har över är att den inte klarar mellanslag eller nya rader. :l

Några ideer?

Nexus86Medlem sedan okt. 20023 030 inlägg
#2

Har kommit en bit på väg. Har följande nu:

$text = eregi_replace("(&lt;c&gt;)((.|\n)*)(&lt;/c&gt;)", "<center>\\\\2</center>", $text);

Den klarar alla tecken. Men den ser inte till att man inte bakar in en <c> inuti den hittade. Detta behövs för att annars byter den ut det första <c> mot <center> och det sista </c> mot </center>. Eller finns det någon bättre lösning?

Nexus86Medlem sedan okt. 20023 030 inlägg
#3

Lyckades få till det med följande uttryck. :)

$text = eregi_replace("(&lt;c&gt;)(([^&]|&([^l]|l([^t]|t([^;]|;([^c])))))*)(&lt;/c&gt;)", "<center>\\\\2</center>", $text);
131 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)