login  Naam:   Wachtwoord: 
Registreer je!
 Forum

reguliere expressie (Opgelost)

Offline bigsmoke - 05/01/2008 18:18
Avatar van bigsmokePHP interesse ik zit met een string waar een hele text in zit. In deze text zitten tags als code, bold, underline etc (<code>, <bold>, <underline). Nu zou ik op wat er tussen deze tags staat een functie willen uitvoeren. Het probleem is dat dit met reguliere expressies zou moeten en ik hier niet goed in ben. Kan iem me helpen?

<specialetag>.*?</specialetag> en op het .*? gedeelte moet een phpfunctie() komen.

3 antwoorden

Gesponsorde links
Offline Wim - 05/01/2008 18:26
Avatar van Wim Crew algemeen volgens mij is het niet moeilijk om een stukje code uit een ubb parser te lenen, of op PHP.net: preg_replace te kijken
Offline bigsmoke - 05/01/2008 18:37
Avatar van bigsmoke PHP interesse Heb dit uit een script genomen:
  1. $body = preg_replace ("'<style[^>]*?>.*?</style>'si", "", $body); // remove style


Maar ik snap niet wat die 'si op het einde komt doen :S
Offline Grayen - 05/01/2008 21:59
Avatar van Grayen PHP ver gevorderde Dit bedoel jij zeker? Ik heb uitleg in bij de code gezet. Hopelijk kan je er wat mee .

  1. <?php
  2. // De functie die wordt uitgevoerd bij elke match in de reguliere expressie
  3. function specialTag($sTag, $sInner)
  4. {
  5. // Doe hier wat je maar wilt, ik heb een voorbeeldje gegeven.
  6.  
  7. $aTrans = array
  8. (
  9. 'bold' => 'strong',
  10. 'code'=> 'code',
  11. 'underline' => 'ins'
  12. );
  13.  
  14. $sTag = strtr($sTag, $aTrans);
  15.  
  16. return '<'.$sTag.'>'.$sInner.'</'.$sTag.'>';
  17. }
  18.  
  19. // Alle sepciale tags die kunnen voorkomen in de string.
  20. $aSpecialTags = array('bold', 'code', 'underline');
  21.  
  22. // De / is in onze reguliere expressie de delimeter. Dit kan bestaan uit zo'n beetje alle niet alfabetische tekens.
  23. // Verstandig is echter om een teken te nemen die je niet of weinig in je expressie zal gebruiken,
  24. // je zal hem namelijk (binnen de expressie) steeds moeten backslashen,
  25. // omdat anders wordt gedacht dat daar de expressie eindigt.
  26.  
  27. // Na de delimeter staan de modifiers. Deze geven aan hoe de expressie moet worden uitgevoerd.
  28. // De "s" is de optie om ervoor te zorgen dat hij meer als een regel bekijkt (anders stopt hij na de eerste newline).
  29. // De "i" zorgt ervoor dat hij case-insensitive wordt.
  30. // De "e" zorgt ervoor dat wat er binnen het tweede argument staat wordt uitgevoerd als PHP (soort eval dus).
  31.  
  32. $sBody = '<bold>lalala</bold>';
  33. $sBody = preg_replace('/<('.implode('|', $aSpecialTags).')>(.*?)<\/\\1>/sie', 'specialTag(\'\\1\', \'\\2\')', $sBody);
  34. echo $sBody;
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.198s