[regexp]<LI> correct afsluiten

Pagina: 1
Acties:

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

ik ben bezig met een contenteditable div,
als je hier lijstjes in aanmaakt, dan sluit ie de <LI>'s niet af op de laatste na.
Zelfs niet als ik de code er zelf goed in afsluit.

Ik wil dit wel netjes hebben, dus ik wou iets schrijven dat
code:
1
2
3
4
5
6
<UL>
<LI>optie1
<LI>optie2
<LI>optie3
<LI>optie4
<LI>optie5</LI></UL>

omzet naar
code:
1
2
3
4
5
6
<UL>
<LI>optie1</LI>
<LI>optie2</LI>
<LI>optie3</LI>
<LI>optie4</LI>
<LI>optie5</LI></UL>


Ik dacht hetvolgende te doen met php
code:
1
$inhoud = preg_replace("/<LI>(.*?)<LI>/ims","<LI>\\1</LI><LI>",$inhoud);


Dit werkt wel, ware het niet dat ie alleen de even opties nu goed afsluit, dit is ook wel logisch, omdat hij dus steeds zoekt naar 2 <LI>'s.. als ie die gevonden heeft gaat ie verder naar de 3e en 4e <LI> en dus slaat ie de oneven optie over...

Moeilijk uit te leggen, maar ik hoop dat iemand t snapt..
heeft er iemand een oplossing?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Als je <li> altijd slechts één regel betreft, dan kun je dit gebruiken:
PHP:
1
$inhoud = preg_replace("/^<li>(.*?)$/i","<li>\\1</li>",$inhoud);

[ Voor 21% gewijzigd door NMe op 18-01-2005 20:42 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • douweh
  • Registratie: Maart 2001
  • Laatst online: 09-10-2024
Nee, dat kan helaas niet,
want dan krijg je dus bij de laatste optie een dubbele sluittag..
(daar staat namelijk al wel een </LI>)

En buiten dat het gaat vaak wel om meerdere regels, maar daar kan je toch wat aan doen met de 's' en 'm' modifiers als ik t goed heb.

Verwijderd

HTML tidy

  • douweh
  • Registratie: Maart 2001
  • Laatst online: 09-10-2024
OK. Maar ik wil t met php doen, had ik er niet bijvermeld maar is ook niet nodig,
want ik vraag in principe wat over regeuliere expressies en die zijn niet php-eigen.

HTML Tidy heeft niks met regexps te maken verder....

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

douweh schreef op dinsdag 18 januari 2005 @ 20:45:
Nee, dat kan helaas niet,
want dan krijg je dus bij de laatste optie een dubbele sluittag..
(daar staat namelijk al wel een </LI>)
En wat is het probleem met "</li></li>" vervangen door "</li>"?
En buiten dat het gaat vaak wel om meerdere regels, maar daar kan je toch wat aan doen met de 's' en 'm' modifiers als ik t goed heb.
Dan zal mijn code niet meer werken, omdat ^ dan alleen matcht met het begin van de hele string, en $ met het eind van de hele string, in plaats van het begin/eind van de regel.

Ik snap niet echt wat deze HTML genereert. Kun je dit niet fatsoenlijk programmeren in plaats van achteraf een correctie erop los te laten?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

HTML tidy met PHP
Of is dat ook weer niet goed genoeg?

  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08-2025
douweh schreef op dinsdag 18 januari 2005 @ 20:25:
Ik dacht hetvolgende te doen met php
code:
1
$inhoud = preg_replace("/<LI>(.*?)<LI>/ims","<LI>\\1</LI><LI>",$inhoud);


Dit werkt wel, ware het niet dat ie alleen de even opties nu goed afsluit, dit is ook wel logisch, omdat hij dus steeds zoekt naar 2 <LI>'s.. als ie die gevonden heeft gaat ie verder naar de 3e en 4e <LI> en dus slaat ie de oneven optie over...

Moeilijk uit te leggen, maar ik hoop dat iemand t snapt..
heeft er iemand een oplossing?
Dat doe je met een lookahead assertion: (?=...)
code:
1
$inhoud = preg_replace("/<LI>(.*?)(?=<LI>)/ims","<LI>\\1</LI><LI>",$inhoud);

| Toen / Nu


  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 04-05 13:54
Of je zet greedy aan...

zeroxcool.net - curity.eu


  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08-2025
Dan krijg je maar 1 match, wat schiet je daar mee op? :?

| Toen / Nu


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Welke HTML-smaak wordt er geserveerd?

HTML4.01 heeft nl. geen end-tag nodig :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
misschien kan dit topic je helpen?

[rml][ PHP] Regex probleem[/rml]
Pagina: 1