preg_match hulp gezocht

Overzicht

Sponsored by: Vacatures door Monsterboard

Natascha deeno

Natascha deeno

03/12/2021 12:43:31
Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?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
Gewijzigd op 03/12/2021 12:44:17 door Natascha deeno
 
PHP hulp

PHP hulp

25/01/2022 15:47:28
 
Rob Doemaarwat

Rob Doemaarwat

03/12/2021 13:21:34
Anchor link
Dan moet je de .* niet "greedy" maken door er een vraagteken achter te zetten, dan probeert ie de match zo kort mogelijk te houden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
preg_match('/"picture"(.*?)"title"/', $file_string, $title);
Gewijzigd op 03/12/2021 13:33:59 door Rob Doemaarwat
 
Natascha deeno

Natascha deeno

03/12/2021 14:06:52
Anchor link
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
 
Ozzie PHP

Ozzie PHP

03/12/2021 15:03:03
Anchor link
Heb je al eens gekeken naar preg_match_all ?
 
Natascha deeno

Natascha deeno

03/12/2021 15:41:25
Anchor link
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);
 
Rob Doemaarwat

Rob Doemaarwat

03/12/2021 17:01:41
Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
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).
 
Natascha deeno

Natascha deeno

07/12/2021 12:21:23
Anchor link
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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<a img,"picture":"
en stukje code
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
","title":"
aan het einde van de plaatjes. daarvan wil ik de 3 plaatje in de match opnemen:



Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<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>
 
Ivo P

Ivo P

07/12/2021 12:34:29
Anchor link
wil je dan niet gewoon

echo $titles[2][0];

hebben?
 
Natascha deeno

Natascha deeno

07/12/2021 12:41:46
Anchor link
Dan je wel Ivo,

Eigenlijk wil dan uiteindelijk:
https://website.net/images/4570b76890769896878h7779898798ui/1000x1000-000000-77-0-0.jpg
kunnen zien, dus het 3e plaatje.
Excuus hoor maar ik begrijp die [2][0]; niet helemaal, ik ga even zoeken/spelen of ik kan begrijpen ten opzicht van matchen de 3e image.
 
Ivo P

Ivo P

07/12/2021 12:43:28
Anchor link
print_r is je hulp.

Wat geeft:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
preg_match_all('/"picture"(.*?)"title"/', $file_string, $titles);
echo '<pre>' . print_r($titles, 1) . '</pre>';
?>
 
Natascha deeno

Natascha deeno

07/12/2021 13:40:09
Anchor link
Hoi Ivo,

Dan geeft u nu dit weer, 2 maal een Array

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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",

        )

)
 
Ivo P

Ivo P

07/12/2021 13:45:54
Anchor link
Dus $titles[0] is dat bovenste blok. $titles[1] is 2e blok.

[0] bevat de ruwe matches: van begin tot eind van je reguliere expressie.
in jouw reguliere expressie staat iets tussen kromme haakjes. (.*)

Per blokje tussen die haakjes krijg je een match. Die vind je in [1], [2] etc.
Maar aangezien jij maar 1 set haakjes hebt, heb jij alleen [1].


Aandacht gaat nu uit naar de matches, dus we kijken naar $titles[1].

daar blijkt dat we in het document 6x een match hadden.
Jouw interesse ging uit naar het 3e plaatje, dus hebben we nummer [2] nodig (we beginnen immers bij 0 te tellen).

Dus
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $titles[1][2]; ?>
 
Natascha deeno

Natascha deeno

07/12/2021 14:08:35
Anchor link
jaa wat goed zeg, dit is een echt duidelijke uitleg, werken met de Array's.
Daar zat hem het hem in, nu begrijp ik ook de andere uitleg op die eerder voorbij kwam, php.net, moest daar echt goed begrijpen hoe dat werkte maar ja nu zie ik het.
super leuk en ontzettend bedankt!!!
 
Natascha deeno

Natascha deeno

08/12/2021 18:10:53
Anchor link
Ik denk dat ik echt een zeik wijf aan worden ben hoor, excuus me hiervoor.
echt alle dank voor de hulp en het werkt erg mooi, ik kan een foto uit album nu perfect als pic grabben zeg maar.

Maar als ik opdracht wil geven om dit plaatje elke x seconde op nieuw te laden, althans het plaatje niet zelf maar de source ervan.... hoe werkt dit?
Een plaatje verversen werkt wel, daarvoor geef ik een eerdere code mee, maar ik denk, correct me if ik zit fout. dat het plaatjes idd verfrest en niet het PHP script zelf, daardoor word steeds dezelfde plaatje getoond, denk ik.

met:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
preg_match_all('/"picture"(.*?)"title"/', $file_string, $titles);
echo '<pre>' . print_r($titles, 1) . '</pre>';
?>

word perfect het plaatje weergeven, maar hoe krijg ik het zo voor elkaar dat dit x seconden het script opnieuw kijkt of de source een ander plaatje heeft?

Daar had ik eerst een soort van java scriptje voor maar ik denkt dat deze alleen het bestaande plaatje herlaad en niet het script zelf, klopt dat?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<script language="javascript">

function updateImage() {

   obj = document.imagename;

   obj.src = obj.src.split("?")[0] + "?" + new Date().getTime();

   //Following statement sets the delay before the function will

   //call itself again (in milliseconds)

   setTimeout("updateImage()",3000);

}

</script>
 
Ivo P

Ivo P

08/12/2021 21:50:41
Anchor link
dit herlaadt hetzelfde plaatje keer op keer.
Wel met een nieuw getal erachter om werkelijk herladen te forceren.

Maar als plaatje.jpg zelf niet verandert, dan zal plaatje.jpg?133434343 en daarna plaatje.jpg?4324343 steeds hetzelfde tonen.

Dit zou je aan kunnen pakken door

<img src="plaatjelader.php"> te gebruiken, en dan kun je in php steeds opnieuw dat plaatje / een nieuw plaatje proberen op te halen.
Maar dat heeft nog wel een aantal "specials" met headers en dergelijke nodig.
 
Natascha deeno

Natascha deeno

09/12/2021 09:36:29
Anchor link
Goedemorgen Ivo,

Bedoel je ermee dat ik een plaatjelader.php maak, en daarin de plaats
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
preg_match_all('/"picture"(.*?)"title"/', $file_string, $titles);
echo '<pre>' . print_r($titles, 1) . '</pre>';
?>


deze laden refreshen, begrijp ik dat goed?
 
Ivo P

Ivo P

09/12/2021 11:56:26
Anchor link
Nee, dat bedoel ik niet.

Er zijn een paar mogelijkheden.
De lompste is om de hele huidige pagina te verversen. Maar dat is irritant voor de gebruiker.

Alternatieven zijn om alleen het plaatjes te vervangen. En dan is denk ik het gemakkelijkste om alleen de url van de afbeelding op te vragen.
Dat kan met een ajax call.

Ik werk met jQuery en dan zou dat gaan met:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<img id="hetplaatje" src="https://website.net/images/ed1c6a82f77ff8db8bfd19f370dc9c8e/1000x1000-000000-80-0-0.jpg" >

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
function refresh_my_image() {
    $.ajax({
        cache: false,
        type: 'GET',
        dataType: 'json',
        url: 'JOUW_URL/getplaatje3.php',
        success: function (data)
        {
            // alert om te zien wat opgehaald is
            alert('plaatje: ' + data.plaatje);
            $('#hetplaatje').attr('src', data.plaatje);
        }
    });
}

setInterval(refresh_my_image, 5000);

</script>


Dit script roept elke 5 seconden een url aan naar het script getplaatje3.php

Dat script moet de juiste url oplepelen en teruggeven.
Dat is grotendeels het eerdere script, maar dan moet hij alleen die ene url teruggeven (als json)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
// haal eerst je $file_string binnen he.
preg_match_all('/"picture"(.*?)"title"/', $file_string, $titles);

if(isset($titles[1][2]) {
   $response['plaatje'] = $titles[1][2];
   header('Content-Type: application/json');
   echo json_encode($response);
   exit();
}

else {
   eader("HTTP/1.1 404 Not Found");
}



?>
 
- Ariën -
Beheerder

- Ariën -

28/12/2021 09:17:53
Anchor link
Topic gesloten na onnodig inmiddels verwijderd spambericht
 
 

Dit topic is gesloten.



Overzicht

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.