Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

PHP: hulp reguliere expressie

Anne
10 antwoorden
  • 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!
  • 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
  • En de link: http://www.designhulp.nl/index.php?subjectID=2&CatID=50&subCatID=118&scName=Reguliere+expressies

    - Bas
  • 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.
  • 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.
  • 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
  • die vlieger gaat niet helemaal op.
    [b: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.
  • 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 <a href="foo.html onclick=bar()">[/color:a581a9e1a3] wordt denk ik ook wat moeilijker voor een regexp.
  • [quote:4f9d91f92e="mw22"]Hmm, een <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
  • 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.)

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.