@jazzman7

Как регуляркой вырезать конкретную ссылку?

Доброго времени суток.
Есть такой текст
<a aria-label="фотография" onclick="return showPhoto('-100714248_457263530', 'wall-100714248_195733', {"temp":{"x":"https:\/\/sun1.tattelecom-nbc.userapi.com\/8WCKHhWVE1k0ZOFPMjhSrMVIfwh6paa3fAu2Ew\/BLrYmamsJYw.jpg","y":"https:\/\/sun1.tattelecom-nbc.userapi.com\/IEPNRfOSuMSCWPzbLlvf1BAgo7iq47V_Ea5Sag\/ReADACWxqrc.jpg","z":"https:\/\/sun2.tattelecom-nbc.userapi.com\/P7QodnS3oEGJ9GNXBEd0vTopaGuv0Uw-1Gnnrg\/Q-ytzLXop9M.jpg","x_":["https:\/\/sun1.tattelecom-nbc.userapi.com\/8WCKHhWVE1k0ZOFPMjhSrMVIfwh6paa3fAu2Ew\/BLrYmamsJYw",359,604],"y_":["https:\/\/sun1.tattelecom-nbc.userapi.com\/IEPNRfOSuMSCWPzbLlvf1BAgo7iq47V_Ea5Sag\/ReADACWxqrc",480,807],"z_":["https:\/\/sun2.tattelecom-nbc.userapi.com\/P7QodnS3oEGJ9GNXBEd0vTopaGuv0Uw-1Gnnrg\/Q-ytzLXop9M",587,987],"base":""},"queue":1}, event)" style="width: 68px; height: 115px;background-image: url(https://sun1.tattelecom-nbc.userapi.com/GPHn0KGJ-tYVSZgVyGegulTCONVIiCM4J_8_QQ/TLNR1gH5bAE.jpg);" class="page_post_thumb_wrap image_cover  page_post_thumb_last_column fl_l page_post_thumb_not_single" data-photo-id="-100714248_457263530"></a>


Регуляркой достаю ссылку
preg_match_all('#(?:https?|ftp)://sun2.[^\s\,]+#i', $h1, $mat);


Достается ссылка первая по счету после текста "temp":{"x":"
А мне нужна третья ссылка перед которой есть текст "z":
Подскажите пожалуйста как ее получить?

Надеюсь смог объяснить что к чему
  • Вопрос задан
  • 126 просмотров
Решения вопроса 1
dollar
@dollar
Делай добро и бросай его в воду.
Вроде всё должно работать, как надо:
https://regex101.com/r/Beayr4/1

Но на всякий случай вот вариант с проверкой "z":
https://regex101.com/r/Beayr4/2
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
<?php
$str = <<<EOT
<a aria-label="фотография" onclick="return showPhoto('-100714248_457263530', 'wall-100714248_195733', {"temp":{"x":"https:\/\/sun1.tattelecom-nbc.userapi.com\/8WCKHhWVE1k0ZOFPMjhSrMVIfwh6paa3fAu2Ew\/BLrYmamsJYw.jpg","y":"https:\/\/sun1.tattelecom-nbc.userapi.com\/IEPNRfOSuMSCWPzbLlvf1BAgo7iq47V_Ea5Sag\/ReADACWxqrc.jpg","z":"https:\/\/sun2.tattelecom-nbc.userapi.com\/P7QodnS3oEGJ9GNXBEd0vTopaGuv0Uw-1Gnnrg\/Q-ytzLXop9M.jpg","x_":["https:\/\/sun1.tattelecom-nbc.userapi.com\/8WCKHhWVE1k0ZOFPMjhSrMVIfwh6paa3fAu2Ew\/BLrYmamsJYw",359,604],"y_":["https:\/\/sun1.tattelecom-nbc.userapi.com\/IEPNRfOSuMSCWPzbLlvf1BAgo7iq47V_Ea5Sag\/ReADACWxqrc",480,807],"z_":["https:\/\/sun2.tattelecom-nbc.userapi.com\/P7QodnS3oEGJ9GNXBEd0vTopaGuv0Uw-1Gnnrg\/Q-ytzLXop9M",587,987],"base":""},"queue":1}, event)" style="width: 68px; height: 115px;background-image: url(https://sun1.tattelecom-nbc.userapi.com/GPHn0KGJ-tYVSZgVyGegulTCONVIiCM4J_8_QQ/TLNR1gH5bAE.jpg);" class="page_post_thumb_wrap image_cover  page_post_thumb_last_column fl_l page_post_thumb_not_single" data-photo-id="-100714248_457263530"></a>
EOT;

if (preg_match('/return showPhoto\(.+, {(.+)}, .+\)/', $str, $output)) {
    $linkData = json_decode('{' . $output[1] . '}', true);

    print_r($linkData);
}


Result:
Array
(
    [temp] => Array
        (
            [x] => https://sun1.tattelecom-nbc.userapi.com/8WCKHhWVE1k0ZOFPMjhSrMVIfwh6paa3fAu2Ew/BLrYmamsJYw.jpg
            [y] => https://sun1.tattelecom-nbc.userapi.com/IEPNRfOSuMSCWPzbLlvf1BAgo7iq47V_Ea5Sag/ReADACWxqrc.jpg
            [z] => https://sun2.tattelecom-nbc.userapi.com/P7QodnS3oEGJ9GNXBEd0vTopaGuv0Uw-1Gnnrg/Q-ytzLXop9M.jpg
            [x_] => Array
                (
                    [0] => https://sun1.tattelecom-nbc.userapi.com/8WCKHhWVE1k0ZOFPMjhSrMVIfwh6paa3fAu2Ew/BLrYmamsJYw
                    [1] => 359
                    [2] => 604
                )

            [y_] => Array
                (
                    [0] => https://sun1.tattelecom-nbc.userapi.com/IEPNRfOSuMSCWPzbLlvf1BAgo7iq47V_Ea5Sag/ReADACWxqrc
                    [1] => 480
                    [2] => 807
                )

            [z_] => Array
                (
                    [0] => https://sun2.tattelecom-nbc.userapi.com/P7QodnS3oEGJ9GNXBEd0vTopaGuv0Uw-1Gnnrg/Q-ytzLXop9M
                    [1] => 587
                    [2] => 987
                )

            [base] => 
        )

    [queue] => 1
)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы