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

Reguliere expressie probleem

Annie
7 antwoorden
  • Okay, ik zit met het volgende probleem. Ik heb de volgende code met wat hyperlinks erin gemaakt:
    [code:1:fbd508d922]$input = '<a href="index.php">hoi</a>dfssdfdfsfsd

    <a href="indexw.php">hoi</a>

    <a href="index5.php">hoi</a>

    <a href="index.php">hoi</a>
    ';[/code:1:fbd508d922]
    Dit is de reguliere expressie die dit stukje tekst moet extraheren:
    [code:1:fbd508d922]$Patroon = '/href="(.*)"/';[/code:1:fbd508d922]
    Ik gebruik vervolgens preg_match om te kijken welke dingen matchen:
    [code:1:fbd508d922]preg_match($Patroon, $input, $output);[/code:1:fbd508d922]
    En ten slotte kijk ik hoeveel array's er worden aangemaakt, oftewel hoeveel resultaten er zijn:
    [code:1:fbd508d922]$aantallinks = count($output);[/code:1:fbd508d922]
    Maar ik krijg als output te zien dat er maar 2 links zijn, wat je ook invoert, ik krijg steeds 2 te zien. Wat doe ik allemaal fout?

    Dit is de totale code:
    [code:1:fbd508d922]
    $input = '<a href="index.php">hoi</a>dfssdfdfsfsd

    <a href="pagina2.php">hoi</a>

    <a href="index5.php">hoi</a>

    <a href="index.php">hoi</a>
    ';
    $Patroon = '/href="(.*)"/';
    preg_match($Patroon, $input, $output);
    $aantallinks = count($output);
    [/code:1:fbd508d922]

    Alvast bedankt!

    Jelle







  • Ik weet het niet zeker, maar ik denk dat het aan preg_match ligt:
    [quote:94460bd6ca]preg_match() returns the number of times pattern matches. That will be either 0 times (no match) or 1 time because preg_match() will stop searching after the first match. preg_match_all() on the contrary will continue until it reaches the end of subject. preg_match() returns FALSE if an error occurred.[/quote:94460bd6ca]

    preg_match stopt na de eerste match en zal dus niet alle links vinden. Met preg_match_all zou hij het wel goed moeten doen.
  • Let ook op dat je expression op dit moment nog 'greedy' is. Wanneer je meerdere links/matches op 1 regel krijgt, dan zal je niet het gewenste resultaat krijgen.
  • Probeer eens
    [code:1:9c50a44156]$Patroon = '/href="([^"]*)"/';[/code:1:9c50a44156]
    I.p.v. (.*) matcht ([^"]*) nu alles behalve een dubbel aanhalingsteken.
  • Bedankt voor de reacties!
    [quote:cc1e3f3c05="SHARK"]Probeer eens
    [code:1:cc1e3f3c05]$Patroon = '/href="([^"]*)"/';[/code:1:cc1e3f3c05]
    I.p.v. (.*) matcht ([^"]*) nu alles behalve een dubbel aanhalingsteken.[/quote:cc1e3f3c05]
    Dit heb ik geprobeerd, maar hij pakt er nog steeds maar één als er twee links op één regel staan. Ik heb trouwens het patroon zowieso een beetje aangepast tot :
    [code:1:cc1e3f3c05]
    <?php
    $Patroon = '/<a.* href=["|']([^"].+?)["|'].*>/';
    ?>
    [/code:1:cc1e3f3c05]
    Wat doe ik fout? Ik ben zoals jullie misschien merken er ook geen expert in :-P
  • Probeer dit eens. Je hebt denk ik gewoon te maken met greedy matching.

    $Patroon = '/href="(.*?)"/';
  • [quote:c342ca97ca="gerben"]Probeer dit eens. Je hebt denk ik gewoon te maken met greedy matching.

    $Patroon = '/href="(.*?)"/';[/quote:c342ca97ca]

    Ja, dit werkt, bedankt, alleen pas ik hem wel even aan zodat hij alleen hyperlinks pakt en niet de <link href=…. tags. Maar, nogmaals bedankt!

Beantwoord deze vraag

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