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] regular expressions image filename

Annie
3 antwoorden
  • Ik kan wel wat met regular expressions, maar bij hetvolgende kom ik er niet uit.

    Ik heb een stukje HTML-code, en daar zitten IMG tags in. Nu wil ik graag met een regular expression alle filenames eruit halen. Het kan echter voorkomen dat de HTML niet netjes is. Daarmee bedoel ik te zeggen dat de filename zowel ingesloten kan zijn met enkele quotes als dubbele quotes, en bijvoorbeeld ook helemaal zonder quotes!

    Deze heb ik al:
    <img[^>]*>
    Daarmee heb ik alle complete IMG tags uit het stukje, nu wil ik per tag de filename eruit hebben.

    Hier zijn voorbeelden die mogelijk kunnen voorkomen en hetgeen ik eruit zou willen halen in een ander kleurtje:
    <img src = 'mooi plaatje.gif[/color:afbf27424a]' width="10" height=111>
    <img src= "ditisookeenplaajte.gif[/color:afbf27424a]" border=0>
    <img src=http://www.example.com/plaatje.gif[/color:afbf27424a] width=10 height=10>
    <img border=1 src ="plaatje2.jpg[/color:afbf27424a]" width="100">
    etc etc etc.

    Kan iemand mij op weg helpen?
  • Heeft nog wat additional testing nodig.
    [code:1:a5cac28aef]
    <?php
    $str = <<<END
    blabla
    <img src = 'mooi plaatje.gif' width="10" height=111>
    <img src= "ditisookeenplaajte.gif" border=0>
    <img src=http://www.example.com/plaatje.gif width=10 height=10>
    <img border=1 src ="plaatje2.jpg" width="100">
    etc etc etc.
    END;

    preg_match_all("/<img.*?(?:(?:src\s?=\s?\"(.+?)\")|(?:src\s?=\s?'(.+?)')|(?:src\s?=(.+?)\s+)).*?>/mi"
    , $str, $matches, PREG_SET_ORDER);

    echo "<pre>

    ";
    foreach ($matches as $val)
    {
    echo "matched: ", htmlentities($val[0]), "
    ";
    echo "part 1: ", $val[1], "
    ";
    echo "part 2: ", $val[2], "
    ";
    echo "part 3: ", $val[3], "

    ";
    }
    echo "

    </pre>";
    ?>
    [/code:1:a5cac28aef]

    Waarschijnlijk is het eenvoudiger/overzichtelijker om de losse <img> tags door een stackbased parser te gooien. In plaats van alles in 1 regexp proberen te stoppen.

    btw. heb bovenstaande in Kodos in elkaar geprutst en vervolgens in een PHP scriptje geplaatst.
  • Ik zit nu helaas op mijn werk dus ik kan het niet meteen testen, maar in elk geval alvast bedankt. Ik kom er zeker nog op terug als het af is.

    Ik scrhijf alvast deze reactie omdat ik me af vroeg wat een stackbased parser is?

    In principe heb ik natuurlijk alle complete IMG tags al gevonden met:

    $pattern = "<img[^>]*>";
    preg_match_all($pattern, $htmlcode, $matches);

    In de array $matches[0] heb ik dan al alle plaatjes ($matches[0][0], $matches[0][1], etc…) dus ik kan per elke IMG tag met een reguliere expressie proberen die filename eruit te halen. Ik hoef niet in 1x én alle image tags én alle filenames te hebben, daar mag dus best deze stap tussen zitten. Is dat hetzelfde als een stackbased parser? :-? Vast niet… :roll:

Beantwoord deze vraag

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