• 10-02-2021, 20:01:14
    #1
    Arkadaşlar diyelim bana aşağıdaki gibi bir içerik geliyor.
    <figure class="media">
        <oembed url="https://www.instagram.com/p/something/"></oembed>
    </figure>
    <figure class="media">
        <oembed url="https://www.youtube.com/watch?v=something"></oembed>
    </figure>
    Bu gelenleri ben replace ederek istediğim formata dönüştürüyordum. Ama böyle 2 farklı oembed gelince ikisinide dönüştürüyor. Biri video iken biri post olabiliyor. O yüzden benim şu an istediğim şey örneğin youtube a dokunmadan sadece instagram linkli olanın linkini bir değişkene almak. Öncesindeki
    <figure class="media">
    <oembed url="
    ve sonrasındaki
    "></oembed></figure>

    kısımları silip linki bir değişkene almak istiyorum. Ama dediğim gibi bunu str replace ile yaptıgımda youtube da etkileniyor. ben bunu istemiyorum. Bunu nasıl yapabilirim?
  • 10-02-2021, 20:22:57
    #2
    str_replace ile bu olamaz anca regex ile yapabilirsiniz. Aşağıdaki kod çalışması ve çıktı olarak linki vermesi gerekli.

    $var = preg_replace_callback('/<figure\s*class="media">\s*<oembed\s*url="(https:\/\/www\.(?:instagram.com)\/p\/[a-zA-Z0-9_-]+)\/"><\/oembed>\s*<\/figure>/', function($matches) {
        return $matches[1];
    }, $text);
  • 10-02-2021, 20:27:58
    #3
    Scarecrow adlı üyeden alıntı: mesajı görüntüle
    str_replace ile bu olamaz anca regex ile yapabilirsiniz. Aşağıdaki kod çalışması ve çıktı olarak linki vermesi gerekli.

    $var = preg_replace_callback("/<figure\s*class="media">\s*<oembed\s*url="(https:\/\/www\.(?:instagram.com)\/p\/[a-zA-Z0-9_-]+)\/"><\/oembed>\s*<\/figure>/", function($matches) {
        return $matches[1];
    }, $text);
    Bir hata var sanırım kodda
  • 10-02-2021, 20:29:12
    #4
    DreaMYs adlı üyeden alıntı: mesajı görüntüle
    Bir hata var sanırım kodda
    Evet, bu şekilde olacak

    $var = preg_replace_callback('/<figure\s*class="media">\s*<oembed\s*url="(https:\/\/www\.(?:instagram.com)\/p\/[a-zA-Z0-9_-]+)\/"><\/oembed>\s*<\/figure>/', function($matches) {
        return $matches[1];
    }, $text);
  • 10-02-2021, 20:46:10
    #5
    Scarecrow adlı üyeden alıntı: mesajı görüntüle
    Evet, bu şekilde olacak

    $var = preg_replace_callback('/<figure\s*class="media">\s*<oembed\s*url="(https:\/\/www\.(?:instagram.com)\/p\/[a-zA-Z0-9_-]+)\/"><\/oembed>\s*<\/figure>/', function($matches) {
        return $matches[1];
    }, $text);
    Süpersin ya çok sağol.
  • 10-02-2021, 21:21:19
    #6
    Youtube için:

    /<figure\s*class="media">\s*<oembed\s*url="(https:\/\/www\.(?:youtube.com)\/watch\?v=[a-zA-Z0-9_-]+)"><\/oembed>\s*<\/figure>/
  • 10-02-2021, 21:22:56
    #7
    Çok sağol.
  • 10-02-2021, 22:54:03
    #8
    Arkadaşlar @Scarecrow; çok yardımcı oldu. Ancak şöyle bir sorun var onu çözemiyorum.

    Kimisi mesela instagram ı şu şekilde paylaşıyor.


    https://www.instagram.com/p/someting..._web_copy_link

    https://www.instagram.com/p/someting/


    https://www.instagram.com/p/someting


    $var = preg_replace_callback('/<figure\s*class="media">\s*<oembed\s*url="(https:\/\/www\.(?:instagram.com)\/p\/[a-zA-Z0-9_-]+)\/"><\/oembed>\s*<\/figure>/', function($matches) {
        return $matches[1];
    }, $text);
    Bu kod sadece https://www.instagram.com/p/someting/ bunu yakalıyor. Sonundaki / olmasa bile yakalamıyor. Burada bir değişken regex kullanabilirmiyiz yine?

    Yani işi zora sokan şey şu konunun başında da belirttiğim gibi hem belirli kısımları kaldırıp hemde belirli kısımları almaya calısıyoruz. Yardımcı olabilecek var mı?
  • 10-02-2021, 23:15:56
    #9
    DreaMYs adlı üyeden alıntı: mesajı görüntüle
    Arkadaşlar @Scarecrow; çok yardımcı oldu. Ancak şöyle bir sorun var onu çözemiyorum.

    Kimisi mesela instagram ı şu şekilde paylaşıyor.



    https://www.instagram.com/p/someting..._web_copy_link



    https://www.instagram.com/p/someting/




    https://www.instagram.com/p/someting



    $var = preg_replace_callback('/<figure\s*class="media">\s*<oembed\s*url="(https:\/\/www\.(?:instagram.com)\/p\/[a-zA-Z0-9_-]+)\/"><\/oembed>\s*<\/figure>/', function($matches) {
        return $matches[1];
    }, $text);
    Bu kod sadece https://www.instagram.com/p/someting/ bunu yakalıyor. Sonundaki / olmasa bile yakalamıyor. Burada bir değişken regex kullanabilirmiyiz yine?

    Yani işi zora sokan şey şu konunun başında da belirttiğim gibi hem belirli kısımları kaldırıp hemde belirli kısımları almaya calısıyoruz. Yardımcı olabilecek var mı?
    /(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?instagram\.com(?:\/p\/)([a-zA-Z0-9_-]+)(?:\/?)(?:\?utm_source=ig_web_copy_link)?/
    Bu şekilde;


    https://www.instagram.com/p/someting..._web_copy_link



    https://www.instagram.com/p/someting/




    https://www.instagram.com/p/someting



    ve bunların https veya www olmayan halini denetleyebilir. Regex zor bir şey değil ancak başta biraz saçma gözükebilir, işin mantığını kavrayınca kolay.