anoniem Geplaatst: 28 december 2003 Delen Geplaatst: 28 december 2003 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! Quote Link naar reactie
anoniem Geplaatst: 28 december 2003 Auteur Delen Geplaatst: 28 december 2003 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 Quote Link naar reactie
anoniem Geplaatst: 28 december 2003 Auteur Delen Geplaatst: 28 december 2003 En de link: http://www.designhulp.nl/index.php?subjectID=2&CatID=50&subCatID=118&scName=Reguliere+expressies - Bas Quote Link naar reactie
anoniem Geplaatst: 28 december 2003 Auteur Delen Geplaatst: 28 december 2003 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. Quote Link naar reactie
anoniem Geplaatst: 28 december 2003 Auteur Delen Geplaatst: 28 december 2003 Is het probleem niet veel simpeler? Ik bedoel, hij heeft 1 string, die 1 html-tag bevat. Hij wil alleen het correcte aantal aanhalingstekens in de string. Nou, dat klinkt als dat er alleen 0,2,4,6 aanhalingstekens in de string voor mogen komen. Dan heb je helemaal geen regexps nodig. Quote Link naar reactie
anoniem Geplaatst: 28 december 2003 Auteur Delen Geplaatst: 28 december 2003 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 Quote Link naar reactie
anoniem Geplaatst: 28 december 2003 Auteur Delen Geplaatst: 28 december 2003 die vlieger gaat niet helemaal op. [b:cf3d32d342][color=darkred:cf3d32d342]<a href="foo.html onclick="bar()>[/color:cf3d32d342][/b:cf3d32d342] ziet er niet echt correct uit terwijl deze wel door de %2 check komt. Quote Link naar reactie
anoniem Geplaatst: 28 december 2003 Auteur Delen Geplaatst: 28 december 2003 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. Quote Link naar reactie
anoniem Geplaatst: 28 december 2003 Auteur Delen Geplaatst: 28 december 2003 [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 Quote Link naar reactie
anoniem Geplaatst: 30 december 2003 Auteur Delen Geplaatst: 30 december 2003 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.) Quote Link naar reactie
anoniem Geplaatst: 30 december 2003 Auteur Delen Geplaatst: 30 december 2003 Je zou ook je code even met TIDY kunnen checken: http://www.google.nl/search?q=tidy Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen