Registreer FAQ Berichten van vandaag


Ga terug   Scholieren.com forum / Technologie / Software & Hardware
Reageren
 
Topictools Zoek in deze topic
Oud 17-07-2003, 22:15
Martin
Avatar van Martin
Martin is offline
Ik ben nu bezig om met PHP een UBB-parser te maken, maar ik loop vast bij een opsomming.

Ik moet dus dit kunnen doen: (1 sterretje per rij wegdenken)

Code:
[list*]
[**] item
[**] item
[**] item[/list*]
En dan moet hij er dit van maken:
  • item
  • item
  • item

Dan kan ik wel dit doen:
PHP-code:
$txt preg_replace("/\[list\](.+?)\[\/list\]/is",'<ul>\1</ul>'$txt); 
Maar als ik dan een fout heb gemaakt in[*], door bijvoorbeeld [**] te doen, dan zet hij de[list] wel om, maar dat moet dan niet omdat er een fout in de code zit.

Ik moet dus eigenlijk kijken of er TUSSEN[list] en [SLASH/list]een rij is met[*]. Is dit niet zo, dan mag[list] ook niet worden geparsed.

Wie weet de oplossing?
Met citaat reageren
Advertentie
Oud 18-07-2003, 12:29
belgo
Avatar van belgo
belgo is offline
Weet je zeker dat dit sowieso werkt?
Blokhaken hebben namelijk zelf ook een functie in de regexp, ze groeperen namelijk mogelijke tekens.

Bovendien gebruik je een / (forwardslash) IN je regexp, terwijl dat teken de velden in een regexp van elkaar scheidt (s/voor/na/).

Het (.+?) stukje klopt in mijn ogen ook niet; de plus zegt dat het voorgaande patroon (. = alles behalve newline) één of meer keer herkend moet worden. Het vraagteken zegt daarentegen dat patroon NUL of één keer herkend moet worden. Ik denk dat je in dit geval alleen de + bedoelt

PHP-code:
$txt preg_replace("/\\[list\\](.+)\\[\\/list\\]/is",'<ul>$1</ul>'$txt); 
Dit werkt al beter..

Om je echte probleem op te lossen, zul je het (.+) gedeelte moeten vervangen door een regexp die vereist dat het patroon[*] één of meer keer voorkomt.

PHP-code:
$txt preg_replace("/\[list\](.*\[\*\]+.*)\[\/list\]/is",'<ul>$1</ul>'$txt); 
Werkt in dit geval volgens mij goed.

Nu komt het grotere probleem.. de[*] vervangen met <li></li>.. dat kan nog lastig worden, dus success!
__________________
so young but so cold
Met citaat reageren
Oud 18-07-2003, 14:53
Verwijderd
Citaat:
belgo schreef op 18-07-2003 @ 13:29:

Het (.+?) stukje klopt in mijn ogen ook niet; de plus zegt dat het voorgaande patroon (. = alles behalve newline) één of meer keer herkend moet worden. Het vraagteken zegt daarentegen dat patroon NUL of één keer herkend moet worden. Ik denk dat je in dit geval alleen de + bedoelt
Incorrect. De . (punt) geeft aan dat elk willekeurig karakter geldt, de + (plus) betekend één of meer keer, en de ? (vraagteken) betekent niet greedy (zo min mogelijk matchen). De regexp was dus wel goed.
Met citaat reageren
Oud 18-07-2003, 15:03
belgo
Avatar van belgo
belgo is offline
Citaat:
eddie schreef op 18-07-2003 @ 15:53:
Incorrect. De . (punt) geeft aan dat elk willekeurig karakter geldt, de + (plus) betekend één of meer keer, en de ? (vraagteken) betekent niet greedy (zo min mogelijk matchen). De regexp was dus wel goed.
Ah.. dat 'greedy / not greedy' gedoe heb ik nooit goed begrepen.

Code:
[list.][*] 1[*] 2[*] enz..[/list][list.][*] A[*] B[*] enz..[/list]
Bij 'not greedy' zou de .+ dan alles tussen de eerste[list.] en de laatste[/list.] pakken:

Code:
[*] 1[*] 2[*] enz..[/list][list.][*] A[*] B[*] enz..
En bij 'greedy' zou de .+? alles tussen de eerste[list.] en de eerste[/list.] pakken.

Code:
[*] 1[*] 2[*] enz..
ofzo
__________________
so young but so cold
Met citaat reageren
Oud 18-07-2003, 15:24
Verwijderd
Citaat:
belgo schreef op 18-07-2003 @ 16:03:
Ah.. dat 'greedy / not greedy' gedoe heb ik nooit goed begrepen.
*verhaal*
bijna goed.

De greedy (gretig) pakt alles tussen de aller eerste en de aller laatste.
Bij
Code:
[list ][*]1[*]2[/list ][list ][*]3[*]3[/list ]
Zou .* (greedy) het volgende matchen (met /\[list\](.*)\[\/list\]/, en zal $1 het volgende bevatten:
Code:
[*]1[*]2[/list][list][*]3[*]3
Met not greedy (niet greetig) (/\[list\](.*?)\[\/list\]/):
Code:
[*]1[*]2
not greedy matched dus zo weinig mogelijk. Greedy matched zoveel mogelijk
Met citaat reageren
Oud 18-07-2003, 15:39
belgo
Avatar van belgo
belgo is offline
nice, bedankt!

(nu weer on-topique =P)
__________________
so young but so cold
Met citaat reageren
Advertentie
Reageren


Regels voor berichten
Je mag geen nieuwe topics starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Spring naar

Soortgelijke topics
Forum Topic Reacties Laatste bericht
Software & Hardware [PHP] Vulnerabilities in preg_replace_callback?
Koen
5 09-11-2005 18:04
Software & Hardware [PHP] Regular expression + str_replace
dafelix
2 15-11-2004 19:58
Software & Hardware [PHP] Letters vervangen door stipjes
ekki
23 28-08-2004 22:25
Beleidszaken [Feature] Weergave van PHP-code
Martin
31 15-05-2004 15:38
Software & Hardware [PHP - MySQL] Resultaten uit een search markeren
Noisecrew
2 07-08-2003 18:09
Software & Hardware [PHP] BBC (preg_replace)
Verwijderd
14 28-03-2003 07:36


Alle tijden zijn GMT +1. Het is nu 07:48.