Op zondag 23 juni 2002 23:16 schreef int het volgende:
Het kan heel makkelijk:
code:
1
2
3
4
| while(eregi("[b]", $message) && eregi("[/b]", $message))
{
// replace
} |
Er is voor deze toepassing van eregi() een preg_***() functie, maar kan er ff niet opkomen. Die werkt iig wat beter als dit, maar is hetzelfde principe.
dit gaat mis met:
dan matcht hij wel beide tags, maar niet in de goede volgorde
Op zondag 23 juni 2002 23:57 schreef WouZz het volgende:
Volgens mij heb je een recursieve functie nodig die je steeds loslaat op de inhoud van [tag] en de 'buitenste' [/tag]. Zo kan je een onberkt aantal niveau's nesten. Maar let wel op dat je een manier implementeerd om niet in een oneindige lus verzeild te raken...
Dus
ongeveer dit idee:
PHP:
1
| <?fuction parseDivs($text, $limit){ $max = 10; if (++$limit > $max) return $text; $text = preg_replace( '/\\[div(( [a-z]+ ?= ?"?[^"\]]+"?)*)\](.*)\\[\/div\]/Usie', "'<div>' . parseDivs($1, $limit) . '</div>'", $text ); return $text;}?> |
Door steeds de buitenste tags te parsen en vervolgens de tekst binnenin te wijzigen loop je spaak bij een simpel voorbeeld als:
code:
1
2
3
| [b]tekst1[/b][b]tekst2[/b]
=>
<b>tekst1[/b][b]tekst2</b> |
met deze code lijkt het echter wel te werken, dit is trouwens een regexp voor ubb codes die identiek zijn aan html codes op de haakjes ([ en ]) na dus bijvoorbeeld [b] en [i]:
PHP:
1
| <?while(preg_match("/\\[(.+?)].*?\\[\/\\1]/is",$text)){ $text = preg_replace("/\\[(.+?)](.*?)\\[\/\\1]/is","<\\1>\\2</\\1>",$text);}?> |