[regexp]Probleem met php en opmaakcodes

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • douweh
  • Registratie: Maart 2001
  • Laatst online: 09-10-2024
Probleempje

Ik heb door een ander programma genereerde tekst waarin gebruik wordt gemaakt van een soort van UBB opmaak codes..

deze vervang ik dan door html code..

Voorbeeld:
code:
1
dit verhaal [vet]moet vet[/vet] en het volgende stukje [schuin]schuin[/schuin]


Wordt dan in html:

code:
1
dit verhaal <B>moet vet</B> en het volgende stukje <I>schuin</I>


Dit lukt allemaal.
Soms is het alleen zo dat in de tekst die ik aangeleverd krijg, een tag wordt geopend voordat de vorige wordt afgesloten, terwijl de tags direct achter elkaar zijn..

Ik heb bijvoorbeeld dit:
code:
1
[vet]vet[schuin][/vet]schuin[/schuin]


Dit wordt dan dus:
code:
1
<B>vet<I></B>schuin</I>


Dit werkt wel in IE maar vind ik niet netjes..
vandaar dat ik dacht een regexpje te verzinnen dat..

zoekt naar een open en een sluit tag direct achter elkaar, en deze dan omwisselt.

ik had het volgende bedacht.
PHP:
1
        $inhoud=eregi_replace( "\\[([a-zA-Z]?)\]\\[/([a-zA-Z]?)\]", "[\\2][/\\1]", $inhoud);


Dit werkt echter niet, heeft er iemand een oplossing voor mijn probleem?

[ Voor 6% gewijzigd door douweh op 28-04-2004 17:37 ]


Acties:
  • 0 Henk 'm!

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
lijkt me dat je niet de eerste bent met dit probleem... [google=ubb parser] levert vast wel een antwoord op...

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Stack-based parsen is het toverwoord.
[search=stack based ubb]

Acties:
  • 0 Henk 'm!

  • douweh
  • Registratie: Maart 2001
  • Laatst online: 09-10-2024
het gaat me dus niet over het nesten of uberhaupt het ubb gebeuren,

ik wil er voor zorgen dat de code die ik van een ander programma aangeleverd krijg eerste gezuiverd wordt!!

dus dat een tag niet gesloten wordt direct na het openen van een andere!

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

douweh schreef op 28 april 2004 @ 17:42:
het gaat me dus niet over het nesten of uberhaupt het ubb gebeuren,

ik wil er voor zorgen dat de code die ik van een ander programma aangeleverd krijg eerste gezuiverd wordt!!

dus dat een tag niet gesloten wordt direct na het openen van een andere!
Uhm ja, en daarom moet je stackbased parsen... je kunt ook even luisteren naar de mensen voordat je ze op 1 punt aanvalt... :z

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • douweh
  • Registratie: Maart 2001
  • Laatst online: 09-10-2024
het is ook zeker niet mijn bedoeling om iemand aan te vallen...

Ik heb alleen het idee, dat stackbased parsen een beetje overkill is.
Als ik mijn regexp aan de praat krijg, dan ben ik allang tevreden.

En dat is eigenlijk ook het probleem dat ik had... wat is er fout aan mijn regexp?!

(Ja ik had misschien ook niet moeten vragen hoe je het anders/beter oplost;))

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

douweh schreef op 28 april 2004 @ 17:50:
het is ook zeker niet mijn bedoeling om iemand aan te vallen...

Ik heb alleen het idee, dat stackbased parsen een beetje overkill is.
Als ik mijn regexp aan de praat krijg, dan ben ik allang tevreden.

En dat is eigenlijk ook het probleem dat ik had... wat is er fout aan mijn regexp?!

(Ja ik had misschien ook niet moeten vragen hoe je het anders/beter oplost;))
Hoe wil je met een regexp detecteren dat <b>1</i>2<strong>3</b>4<em>5<i>6</strong>7</i> niet geldig is? :?

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
douweh schreef op 28 april 2004 @ 17:42:
het gaat me dus niet over het nesten of uberhaupt het ubb gebeuren,

ik wil er voor zorgen dat de code die ik van een ander programma aangeleverd krijg eerste gezuiverd wordt!!

dus dat een tag niet gesloten wordt direct na het openen van een andere!
Stack-based parsen is het toverwoord.
[search=stack based ubb]

Acties:
  • 0 Henk 'm!

  • douweh
  • Registratie: Maart 2001
  • Laatst online: 09-10-2024
curry684 schreef op 28 april 2004 @ 18:01:
[...]

Hoe wil je met een regexp detecteren dat <b>1</i>2<strong>3</b>4<em>5<i>6</strong>7</i> niet geldig is? :?
Dat wil ik dus ook helemaal niet, ik zal wel een verkeerd beeld geven of iets dergelijks
maar het gaat dus alleen om het geval
wanneer een ouwe tag gesloten wordt DIRECT na het openen van een nieuwe..
code:
1
[schuin][/vet]


Dat kan iig nooit de bedoeling zijn, daarom moet zoiets dus vervangen worden door..

code:
1
[/vet][schuin]


Dat is mijn enige probleem, en daar probeer ik dus een regexp voor te verzinnen, ik snap niet goed waarom die die ik voorstelde niet werkte?

Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
ah ok, nu wordt het een stuk duidelijker.

code:
1
$inhoud=eregi_replace( "\\[([a-zA-Z]+)\]\\[\/([a-zA-Z]+)\]", "[/\\2][\\1]", $inhoud);


dus de ? wordt + en in de / in de replacement string natuurlijk ff verplaatst.
* a? = match 'a' 1 or 0 times
* a* = match 'a' 0 or more times, i.e., any number of times
* a+ = match 'a' 1 or more times, i.e., at least once
* a{n,m} = match at least n times, but not more than m times.
* a{n,} = match at least n or more times
* a{n} = match exactly n times
zie ook de faq. wel heel erg basic trouwens, iets meer je in de materie verdiepen was geen doodzonde geweest.

[ Voor 65% gewijzigd door chris op 28-04-2004 20:34 ]

Pagina: 1