login  Naam:   Wachtwoord: 
Registreer je!
 Forum

html regex

Offline nemesiskoen - 07/06/2006 16:46 (laatste wijziging 07/06/2006 16:48)
Avatar van nemesiskoenGouden medaille

PHP expert
Ik moet toegeven: ik ben géén regex held. Toch heb ik zitten denken aan een regex die het volgende doet:

<voorvoegsel:blaat foo="bar" test="test"></blaat>

Omzet naar:

$class = "blaat";
$array = array("foo" => "bar", "test" => "test");

Zodat je dus html tags omzet naar wat ze echt zijn: 'objecten' en lidvariabelen/functies.

Het is om volgende constructie waar te maken:

  1. <voorvoegsel:attribuut value1="test" value2="test2"></attribuut>
  2. ==>
  3. <?php
  4. $obj = new Attribuut(array("value1" => "test", "value2" => "test2"));
  5. ?


Ik vraag niet of iemand hier een volledige (complexe?) regex neerknalt maar me een beetje in de goede richting schuift: welke functie kan ik hier best voor gebruiken, op wat moet ik letten en misschien wat tips. Dan kan ik hem (hoop ik toch) zelf wel ineen steken. Je mag altijd een voorbeeld geven maar ik zit er niet om te janken. Het is eerder een beetje advies dan echt een oplossing dat ik zoek.

//waarvoor heb ik dit nodig: ik ben bezig met enkele validators. Door ze rechtstreeks in de html te integreren hoop ik op meer gebruiksgemak. Denk aan de 'asp:'-namespace.

//dat "voorvoegsel: " staat erbij zodat dit niet zou toegepast worden op elk html attribuut. Enkel op degeen die vooraf worden gegaan door een specifiek "voorvoegsel".

4 antwoorden

Gesponsorde links
Offline Richard - 07/06/2006 16:54 (laatste wijziging 07/06/2006 16:54)
Avatar van Richard Crew algemeen Ik zou beginnen met een regex die alle html tags matcht:

  1. <?php
  2. $matches = array ();
  3. preg_match_all ('~<voorvoegsel:[^>]+>~', $code, $matches);
  4. ?>


EDIT: voorvoegsel toegevoegd;-)

Hierna kun je hier doorheen lopen met een regex voor waardes:

  1. <?php
  2. $tags = array ();
  3. $tag_matches = array ();
  4. $i = 0;
  5. foreach ($matches[0] as $tag)
  6. {
  7. $tags[$i] = array ();
  8. preg_match_all ('~([a-zA-Z-]+)\s*=\s*("[^"]*"|\'[^\']*\'|[^\s>]*)~', $tag, $tag_matches, PREG_SET_ORDER);
  9. foreach ($tag_matches as $_tag)
  10. {
  11. $tags[$i][$_tag[1]] = $_tag[2];
  12. }
  13. }
  14. ?>


Zoiets ongeveer matcht ieder stukje steeds.

Als je vragen hebt over wat dan ook zie ik het wel;-)
Offline ikkedikke - 07/06/2006 16:57 (laatste wijziging 07/06/2006 16:58)
Avatar van ikkedikke PHP expert
  1. "<[a-z]:([a-z]) (([a-z])=\"([a-z])\")?>"

ik ben zelf ook geen held maar het is een begin?


edit: Er is hier toch iemand iets handiger met die dingen 
Offline nemesiskoen - 07/06/2006 16:59 (laatste wijziging 07/06/2006 17:06)
Avatar van nemesiskoen Gouden medaille

PHP expert
Thanks both, bijde reacties waren zeer hulpzaam. Ik ga er direct eens op los!

Stel ik wil het als een array met 1 dimensie (en ik reken erop dat er geen 2 keys opnieuw worden ingevuld), kan ik dan gewoon met $tag_matches werken?

(normaal gezien zou ik wel een var_dump hebben gedaan van $tag_matches, maar wampserver werkt al enkele dagen niet meer mee (wil niet meer opstarten), ben nu wel xampp aan het installeren maar vandaar dat ik het nog eens vraag)
Offline Richard - 07/06/2006 18:46
Avatar van Richard Crew algemeen als je hier kijkt: http://www.jexus.net/test/html_regex.php , zie je hopelijk hoe het werkt, als je nog extra vragen hebt, zie ik het wel;-)
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.209s