webForumDet fria alternativet

REGEXP problem

6 svar · 144 visningar · startad av schutzer

schutzerMedlem sedan okt. 200019 inlägg
#1

Jag tänkte tillåta att man skriver viss html-kod i gästböker och dylikt. För att ha lite kontroll på det hela så började jag med att koda allt med htmlentities.

Min tanke är att sedan ersätta t.ex. <B> med <B>. Dessutom vill jag att de avslutar den korrekt. Detta har jag lyckat lösa med följande regexp:

$retStr = eregi_replace("<(B)>(.*)</(B)>","<\\1>\\2</\\3>",$retStr);

Kanske inte jättesnyggt men det fungerar.

Nu till första frågan: Jag vill ange flera taggar i samma regexp men vill att den ska avslutas korrekt, dvs jag vill att <B>text</B> och <I>text</I> ska tillåtas men inte <B>text</I>.

Detta skulle jag vilja göra ungefär så här men det fungerar inte eftersom \\1 bara fungerar i ersättningstexten.

$retStr = eregi_replace("<(B&#0124;I)>(.*)</(\\1)>","<\\1>\\2</\\3>",$retStr);

Några förslag på hur man löser det.

Nästa problem: Jag vill kunna tillåta <UL><LI>Text</LI><LI>Text</LI><UL>.

Problemet om jag använder ovanstående konstruktion är att * är glupsk och sväller så mycket som mycket. Resultatet av (.*) blir därför Text</LI><LI>Text istället för bara Text. I Perl skriver man (.*?) tror jag men det fungerar inte. Det stod någonting om (U?) i manualen men jag fattade inte.

Tacksam för svar.

schutzerMedlem sedan okt. 200019 inlägg
#2

Det blev lite konstigt eftersom webforum tydligen gjorde om & mot & men jag tror ni förstår vad jag menar.

spangoMedlem sedan juni 20008 205 inlägg
#3

Det första problemet har jag ingen aning om, men däremot det andra. Kolla in http://www.php.net/manual/ref.pcre.php
Jag vet inte om det hjälper men jag tror att det borde göra det. Särskilt Pattern syntax.

------------------
Ta dig i dalen och gör mig till spango

schutzerMedlem sedan okt. 200019 inlägg
#4

Jag såg att det stod någonting om ungreedy i pattern syntax men jag förstod inte hur jag skulle skriva.

spangoMedlem sedan juni 20008 205 inlägg
#5

Precis som i Perl, verkar det...

preg_replace("/([[i]ett mönster...[/i]]*?)/", "det vi ska byta regexp:en med, med eventuella bakåtreferenser som \\1 och \\2", "den sträng vi ska byta ut saker i");

\r Parse error
------------------
Ta dig i dalen och gör mig till spango

[Redigerat av spango den 07 jan 2001]

schutzerMedlem sedan okt. 200019 inlägg
#6

Näpp, så är det inte. Jag försökte så först men det resulterar i

Warning: REG_BADRPT:"repetition-operator operand invalid in include/functions.php on line 310
nanneMedlem sedan dec. 19991 749 inlägg
#7

Om jag har förstått dig rätt så vill du att vissa taggar ska fungera men inte alla?

Isf så skriv bara.

$retStr = strip_tags("<b><i><ul><li>",$retStr);

------------------

"Där ser du. De är synthare och inte scientologer..."

nanne.net

129 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)