Ga naar inhoud

PHP: hulp reguliere expressie


anoniem

Aanbevolen berichten

Hoi! Ik heb hulp nodig bij een reguliere expressie in PHP! Mijn probleem: ik heb een string die 1 HTML-tag bevat (zoals '<a href="link" onclick="doiets">'). Nu wil ik met een regexp controleren of de string het correcte aantal aanhalingstekens heeft. Dus als 'onclick="doeiets' geen afsluitende aanhalingsteken heeft, dan moet de regexp falen. Ik weet niet bij voorbaat hoeveel aanhalingstekens in de string zitten (kan van geen tot heel veel, afhankelijk van de attributen die aan de tag zijn toegevoegd), dus ik kan niet hard coderen dat er bv. gekeken moet worden naar 'href' en 'onclick'. Weet iemand hoe ik dit kan doen met preg_match() of preg_match_all()? Bedankt!
Link naar reactie
Reguliere expressies zijn niet echt iets waar ik goed ik ben, maar je gewoon op een standaard patroon zoeken. Het patroon is als volgt:[list:7affebf996][*:7affebf996]"[b:7affebf996]<[/b:7affebf996]" direct gevolgd door [b:7affebf996]lowercase letters[/b:7affebf996][*:7affebf996]Eventuele parameters[list:7affebf996][*:7affebf996]Eén of meer spaties[*:7affebf996]Lowercase letters[*:7affebf996]Isgelijk-teken "="[*:7affebf996]Een alfanummerieke string inclusief spaties ingesloten door aanhalingstekens[/list:u:7affebf996][*:7affebf996]"[b:7affebf996]>[/b:7affebf996]" of [b:7affebf996]spatie[/b:7affebf996]"[b:7affebf996]/>[/b:7affebf996]"[/list:u:7affebf996]Ik hoop dat dit een beetje duidelijk is... De parameters kunnen 0 (nul) of meer keer voorkomen maar altijd in die samenstelling en volgorde, dus dat is één patroon. Ik had ook nog een link naar een goede beginnerstutorial maar die moet ik nog ff zoeken, kan ik zo snel niet vinden en het is nogal laat, dat komt later wel... - Bas
Link naar reactie
Bas, je vergeet tags zoals <h1> ;) Door de wijze van Bas te volgen ben je er bijna. Je hebt dan namelijk alle html-tags te pakken. Nu moet je alleen nog een manier zien te vinden om te bepalen of deze op een correcte wijze de parameters omsluiten. Je kan ook proberen meteen de onjuiste eruit te halen door de regular expression wat aan te passen.
Link naar reactie
Dat het aantal aanhalingstekens een even getal of nul is betekent nog niet dat de HTML-tag ook geldig is. Daarnaast vraagt de TS zelf om een oplossing met Regexps, dus dat was eigenlijk de reden dat ik daarop antwoordde... Maar idd, strikt gezien kan je ook gewoon kijken of [i:9cb775ae7b]($aantalAanhalingstekens % 2) == 0[/i:9cb775ae7b]. - Bas
Link naar reactie
Hmm, ja ik geef toe, ik was een beetje aan het pietleuten. :) ^<[a-z]+(\s+?[a-z]+?=".*?")*(\s/)?>$ Zoiets ongeveer? Ik heb het niet getest, dus het zal wel niet goed zijn. Ik zit me wel te bedenken: je kun ook zoiets hebben: onclick="doeiets(\"help\")" Hmm, een [color=darkred:a581a9e1a3]<a href="foo.html onclick=bar()">[/color:a581a9e1a3] wordt denk ik ook wat moeilijker voor een regexp.
Link naar reactie
[quote:4f9d91f92e="mw22"]Hmm, een [color=darkred:4f9d91f92e]<a href="foo.html onclick=bar()">[/color:4f9d91f92e] wordt denk ik ook wat moeilijker voor een regexp.[/quote:4f9d91f92e]Nee hoor, qua sysntax is dit gewoon goed. :roll: Het enige punt van twijfel is de spatie, [i:4f9d91f92e]href[/i:4f9d91f92e] zou eigenlijk geen spatie mogen bevatten maar dat is geen harde regel, maar [i:4f9d91f92e]title[/i:4f9d91f92e] bevat bijna per definitie een spatie. @Annie: ik zei wat jij zei, we zijn het met elkaar eens. ;) - Bas
Link naar reactie
Bedankt voor jullie antwoorden - en zo snel! Ik heb n.a.v. jullie commentaar zitten prutsen en ben op het volgende uitgekomen: [code:1:1f773147b5] <?php error_reporting(E_ALL); $html = '<img src="images/blah.gif" border="1" onclick = "openwindow(\"iets.html\")" id="13">'; preg_match_all('/(.*(".*(?<!\\\)").*)+/Us', $html, $array_matches); print_r($array_matches); ?> [/code:1:1f773147b5] Deze regexp pakt alle tekst tussen aanhalingstekens, ongeacht het aantal aanhalingstekens in de tekst (dus precies wat ik wil). Ook hoiudt 'ie rekening met wat mw22 opmerkte over ge-escapde quotes: \". Zover dus goed. Alleen: hij pakt alle tekst tussen correct afgebakende quotes. Dus als ik [code:1:1f773147b5] $html = '<img src="images/blah.gif" border="1" onclick = "openwindow(\"iets.html\")" id="13">'; [/code:1:1f773147b5] vervang door [code:1:1f773147b5] $html = '<img src="images/blah.gif" border="1" onclick = "openwindow(\"iets.html\")" id="13>'; [/code:1:1f773147b5] (waarbij de laatste quote van id="13 is weggevallen), dan pakt 'ie alleen de 'goede' quotes en geeft 'ie niet aan dat de laatste een quote mist. En dat is wel wat ik nodig ben! Zien jullie nog oplossingen om dit te ondervangen? (Overigens, mijn regexp houdt geen rekening met of er al dan niet een spatie tussen bv. src="" staat - het gaat me vooral om het extraheren van de tekst tussen de quotes.)
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

×
×
  • Nieuwe aanmaken...