Reg Exp wybieranie wartości z danym kluczem spośród wielu

0

Znowu mnie reg exp dręczy. Jest problem z https://regexr.com/4v2vn
Powinno brać z tego fragmentu tylko to co ma klucz url a nie np. thumb

Problem też w tym, że jest tam wiele tych wartości z kluczem url potrzebuje ich wszystkich.

1

Te dane wejściowe wyglądają zupełnie jak json. Czemu nie działasz na tym jak na jsonie żeby uzyskać wartość kluczy url?
Chcesz uzyskać cały URL czy masz coś przerabiać?

0

@jurek1980: Dane mam w postaci plain html, potem parsuje wyszukując odpowiedni <script>, potem wydobyłem już to jednym preg_match() teraz muszę mieć wszystkie url tego ciągu co w przykładzie.

0

Nie znam się na regexie, ale https://regex101.com/r/jmQvrH/1 chyba działa.
https://ideone.com/6P7B7h

1

Zwróć uwagę na brakujący początek tego jsona {":

<?php
$json = '{"data":[{"url":"https:\/\/d-gr.ppstatic.pl\/kadry\/k\/r\/gr-ogl\/24\/80\/2613984_202115698_mieszkanie-warszawa-bialoleka-ul-swiatowida_xlarge.jpg","thumb":"https:\/\/d-gr.ppstatic.pl\/kadry\/k\/r\/gr-ogl\/24\/80\/2613984_202115698_mieszkanie-warszawa-bialoleka-ul-swiatowida_small.jpg"}]}';
$decoded = json_decode($json);
$data = $decoded->data;
foreach ($data as $row){
    var_dump($row->url);
}
1

Można spróbować jakiegoś lookahead,(?=,), żeby nie łapać wszystkiego:
https://regex101.com/r/Yoo1LB/2
PS A tak w ogóle, to to wcale nie wygląda jak JSON ;-)
EDYCJA: Źródło:
https://www.regular-expressions.info/lookaround.html
https://duckduckgo.com/?q=is+PHP+regex+lookahead&t=canonical&ia=web

0

@lion137: Tak wygląda cały <script> https://pastebin.com/653JWvq8 muszę z niego wyciągnąć url od pełnych obrazków. Wyrażenia wydawały mi się najprostszym rozwiązaniem, ale jedynek nie jest tak łatwo.

0

W regexr.com/4v390 działa w php: https://i.imgur.com/mKw80YI.png

Czyli regexr.com zwraca prawidłowo 15 wyników, a po przeniesieniu tego do PHP jest tylko jeden wynik? To Wrzuć cały kod i niech ktoś kto się w tym czymś orientuje sprawdzi.

Nie mówiłem, że to JSON.

Przecież Widzisz tam uśmiechniętą mordę :) - czyli żarcik.

1

@lion137: Tak wygląda cały <script> https://pastebin.com/653JWvq8 muszę z niego wyciągnąć url od pełnych obrazków. Wyrażenia wydawały mi się najprostszym rozwiązaniem, ale jedynek >nie jest tak łatwo.

regex101.com dalej zwraca 15 wyników:
https://regex101.com/r/Yoo1LB/3

0
CodeRZ napisał(a):

@lion137: Zerknąłbyś na mój kod? https://pastebin.com/FLQ3eaTt + parser z https://simplehtmldom.sourceforge.io/

Napisalem, że nie umiem tego czegoś (PHP), chyba lepiej, żeby ktoś bardziej kumaty ode mnie rzucił okiem.

0

@jurek1980: Dziękuje Ci bardzo! Twój sposób jest najlepszy, dałem do dekodowania json i śmiga.

<?php
include_once('./../parser/simple_html_dom.php');

$details = file_get_html("https://gratka.pl/nieruchomosci/mieszkanie-warszawa-bialoleka-ul-swiatowida/oi/2613984");

$scripts = $details->find("script");

$photos = $scripts[32]->innertext;
preg_match('/dataJson\s*:\s*([^\]]+)/', $photos, $photos_matches);
if(isset($photos_matches)){
    $photos_matches =  "{\"".$photos_matches[0]."]}";
    $photos_matches = explode("dataJson: [",$photos_matches);
    $decoded = json_decode($photos_matches[1]);
    $data = $decoded->data;
    foreach ($data as $row) {
        echo "<br>".$row->url;
    }
}

efekt:


https://d-gr.ppstatic.pl/kadry/k/r/gr-ogl/24/80/2613984_202115698_mieszkanie-warszawa-bialoleka-ul-swiatowida_xlarge.jpg
https://d-gr.ppstatic.pl/kadry/k/r/gr-ogl/24/80/2613984_202115860_mieszkanie-warszawa-bialoleka-ul-swiatowida_xlarge.jpg
https://d-gr.ppstatic.pl/kadry/k/r/gr-ogl/24/80/2613984_202116014_mieszkanie-warszawa-bialoleka-ul-swiatowida_xlarge.jpg
https://d-gr.ppstatic.pl/kadry/k/r/gr-ogl/24/80/2613984_202116214_mieszkanie-warszawa-bialoleka-ul-swiatowida_xlarge.jpg
https://d-gr.ppstatic.pl/kadry/k/r/gr-ogl/24/80/2613984_202116318_mieszkanie-warszawa-bialoleka-ul-swiatowida_xlarge.jpg
https://d-gr.ppstatic.pl/kadry/k/r/gr-ogl/24/80/2613984_202116418_mieszkanie-warszawa-bialoleka-ul-swiatowida_xlarge.jpg
https://d-gr.ppstatic.pl/kadry/k/r/gr-ogl/24/80/2613984_202116522_mieszkanie-warszawa-bialoleka-ul-swiatowida_xlarge.jpg
https://d-gr.ppstatic.pl/kadry/k/r/gr-ogl/24/80/2613984_202116634_mieszkanie-warszawa-bialoleka-ul-swiatowida_xlarge.jpg
https://d-gr.ppstatic.pl/kadry/k/r/gr-ogl/24/80/2613984_202116738_mieszkanie-warszawa-bialoleka-ul-swiatowida_xlarge.jpg
https://d-gr.ppstatic.pl/kadry/k/r/gr-ogl/24/80/2613984_202116822_mieszkanie-warszawa-bialoleka-ul-swiatowida_xlarge.jpg
https://d-gr.ppstatic.pl/kadry/k/r/gr-ogl/24/80/2613984_202117190_mieszkanie-warszawa-bialoleka-ul-swiatowida_xlarge.jpg
https://d-gr.ppstatic.pl/kadry/k/r/gr-ogl/24/80/2613984_202117330_mieszkanie-warszawa-bialoleka-ul-swiatowida_xlarge.jpg
https://d-gr.ppstatic.pl/kadry/k/r/gr-ogl/24/80/2613984_202117490_mieszkanie-warszawa-bialoleka-ul-swiatowida_xlarge.jpg
https://d-gr.ppstatic.pl/kadry/k/r/gr-ogl/24/80/2613984_202117648_mieszkanie-warszawa-bialoleka-ul-swiatowida_xlarge.jpg
https://d-gr.ppstatic.pl/kadry/k/r/gr-ogl/24/80/2613984_202117794_mieszkanie-warszawa-bialoleka-ul-swiatowida_xlarge.jpg

1 użytkowników online, w tym zalogowanych: 0, gości: 1