Hallo,

Heb een vraagje over het matchen van een preg_match op een website adres.

De volgende code heb ik gemaakt, wat overigens prima werkt:
<?php
$file_string = file_get_contents('https://website.nl');
preg_match('/"picture"(.*)"title"/', $file_string, $title);
$title_out = $title[1];
echo $title_out ;
?>


Alleen in de broncode van de website komt "title" meerdere malen voor en de preg_match pakt daarbij de laatste "title" op de website. echter wil ik dat hij de eerste de beste "title" na "picture" pakt.
Kan iemand mij hier in helpen? ik ben niet zo erg in thuis maar spelende wijs gaat me het prima af.
misschien zijn er voorbeelden van andere hoe men dit kan oplossen?

alvast bedankt

groetjes Natascha
Dan moet je de .* niet "greedy" maken door er een vraagteken achter te zetten, dan probeert ie de match zo kort mogelijk te houden:

preg_match('/"picture"(.*?)"title"/', $file_string, $title);
Ow oke, wat goed zeg, dank u wel, dit werkt inderdaad prima.
Een gewetensvraag, stel dat ik nu de 3e plaatje uit een pagina wil laden, is er een mogelijkheid om 3e "picture" of 3e "title" aan te roepen?

nogmaals dank

Natascha
Heb je al eens gekeken naar [php]preg_match_all[/php] ?
Ja ook al, eerlijk gezegd begrijp ik niet alles direct, er komt heel veel text en informatie op me af die ik niet begrijp zo 123, programmeren is ook niet echt mij ding hoor, maar soms beetje mee stoeien.
op mijn website heb ik meerdere plaatjes staan met dezelfde regels, nu pakt bij deze prima omdat deze de eerste in de pagina is, daar op volgende staan er meerdere die dezelfde regels hebben.

dacht eerst met preg_match_all en dan tellen vanaf de eerste "picture" iets met >3 om de 3e plaatje op te pakken maar dan geeft ie foutmeldingen
preg_match_all('/"picture"(.*>3)"title"/', $file_string, $title);

preg_match_all('/"picture"(.*?)"title"/', $file_string, $titles);
print_r($titles);

In $titles zitten nu *alle* titels. Haal hier dan de 3e uit (kijk even naar de print_r($titles) voor de indeling; hier is nog mee te "spelen" door als 4e parameter de juiste "flags(s)" mee te geven - zie de docs in de link bij Ozzie).
Dank jullie wel voor mee denken, ik loop hier echter stuk, probeer het te begrijpen maar ik krijg geen vat op de matchen van, nou in dit voorbeeld 3 plaatje.

De bron code is random, de plaatjes wisselen in een soort van carrousel op diversen momenten van de dag, enige wat vast blijft om te taggen zijn de

<a img,"picture":"
en stukje code
","title":"
aan het einde van de plaatjes. daarvan wil ik de 3 plaatje in de match opnemen:



<a img,"picture":"https://website.net/images/4570b755658c4d6d9633adab48fbfa75/1000x1000-000000-80-0-0.jpg","title":"geen omschrijving van plaatje"},"show":><br>
<a img,"picture":"https://website.net/images/4570b755658c4d6d9638fadauhjhmm75/1000x1000-000000-65-0-0.jpg","title":"geen omschrijving van plaatje"},"show":><br>
<a img,"picture":"https://website.net/images/4570b76890769896878h7779898798ui/1000x1000-000000-77-0-0.jpg","title":"geen omschrijving van plaatje"},"show":><br>
<a img,"picture":"https://website.net/images/8798798j8h8jjkluyojnj90j980uojlj/1000x1000-000000-20-0-0.jpg","title":"geen omschrijving van plaatje"},"show":><br>
<a img,"picture":"https://website.net/images/54ju7de546fuyi86ibiyff66ghjgjgjh/1000x1000-000000-87-0-0.jpg","title":"geen omschrijving van plaatje"},"show":><br>
wil je dan niet gewoon

echo $titles[2][0];

hebben?
print_r is je hulp.

Wat geeft:

<?php
preg_match_all('/"picture"(.*?)"title"/', $file_string, $titles);
echo '<pre>' . print_r($titles, 1) . '</pre>';
?>
Hoi Ivo,

Dan geeft u nu dit weer, 2 maal een Array

Array
(
    [0] => Array
        (
            [0] => "picture":"https://website.net/images/9ca0a009904d60fcccef20d680f5370a/1000x1000-000000-80-0-0.jpg","title"
            [1] => "picture":"https://website.net/images/d4e1eb3be395e1545a1a6e841d3eb63c/1000x1000-000000-80-0-0.jpg","title"
            [2] => "picture":"https://website.net/images/ed1c6a82f77ff8db8bfd19f370dc9c8e/1000x1000-000000-80-0-0.jpg","title"
            [3] => "picture":"https://website.net/images/ed1c6a82f77ff8db8bfd19f370dc9c8e/1000x1000-000000-80-0-0.jpg","title"
            [4] => "picture":"https://website.net/images/ced16733944378217630f613c277f34a/1000x1000-000000-80-0-0.jpg","title"
            [5] => "picture":"https://website.net/images/74160d6a4681c101268f64451847b0d7/1000x1000-000000-80-0-0.jpg","title"

        )

    [1] => Array
        (
            [0] => :"https://website.net/images/9ca0a009904d60fcccef20d680f5370a/1000x1000-000000-80-0-0.jpg",
            [1] => :"https://website.net/images/d4e1eb3be395e1545a1a6e841d3eb63c/1000x1000-000000-80-0-0.jpg",
            [2] => :"https://website.net/images/ed1c6a82f77ff8db8bfd19f370dc9c8e/1000x1000-000000-80-0-0.jpg",
            [3] => :"https://website.net/images/ed1c6a82f77ff8db8bfd19f370dc9c8e/1000x1000-000000-80-0-0.jpg",
            [4] => :"https://website.net/images/ced16733944378217630f613c277f34a/1000x1000-000000-80-0-0.jpg",
            [5] => :"https://website.net/images/74160d6a4681c101268f64451847b0d7/1000x1000-000000-80-0-0.jpg",

        )

)

Reageren