• 17-08-2019, 21:31:13
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Merhabalar,
    Düzenli ifadelere hakim değilim. preg_replace kullanarak,

    ÇERÇEVE SETİ HOŞGELDİN PK:1 KL:60 ifadesinde:

    PK:1 ifadesinin PAKET 1 ADET olarak değişmesi ve KL:60 ifadesinin silinmesi gerekiyor. 1 ve 60 değerlerinin değişken olduğunu söylememe gerek yok herhalde.

    ÇERÇEVE SETİ HOŞGELDİN PK:1 KL:60 -------> ÇERÇEVE SETİ HOŞGELDİN PAKET 1 ADET olmalı

    Şimdiden teşekkür ederim.
  • 17-08-2019, 21:49:36
    #2
    <?php
    $metin = "ÇERÇEVE SETİ HOŞGELDİN PK:1 KL:60";
    $bul = array("PK","KL");
    $degistir = array("PAKET 1 ADET","ÖRNEK");
    $metin = str_replace($bul, $degistir, $metin);
    echo $metin;
    ?>
  • 17-08-2019, 22:57:10
    #3
    strong adlı üyeden alıntı: mesajı görüntüle
    <?php
    $metin = "ÇERÇEVE SETİ HOŞGELDİN PK:1 KL:60";
    $bul = array("PK","KL");
    $degistir = array("PAKET 1 ADET","ÖRNEK");
    $metin = str_replace($bul, $degistir, $metin);
    echo $metin;
    ?>

    Burda 1 ve 60 değerleri değişkendir. XML'den ürün çekiyorum. Binlerce farklı varyasyon var. İstediğim şey str_replace değil maalesef. ÇERÇEVE SETİ HOŞGELDİN PK:1 KL:60 örnek olsun diye yazdım. ÇERÇEVE SETİ HOŞBULDUK PK:5 KL:20 şeklinde de olabilirdi.
  • 17-08-2019, 23:12:49
    #4
    ErhanXk adlı üyeden alıntı: mesajı görüntüle
    Burda 1 ve 60 değerleri değişkendir. XML'den ürün çekiyorum. Binlerce farklı varyasyon var. İstediğim şey str_replace değil maalesef. ÇERÇEVE SETİ HOŞGELDİN PK:1 KL:60 örnek olsun diye yazdım. ÇERÇEVE SETİ HOŞBULDUK PK:5 KL:20 şeklinde de olabilirdi.
    Kardeşim bu örnek bir yöntemdir ve istediğin her şeye uyarlanabilir.
    ÇERÇEVE SETİ BAY BAY PK:991 e de yaparsın. Ara bul değiştir mantığı vardır burada.
    Kendine göre geliştirebilirsin.
  • 17-08-2019, 23:21:10
    #5
    strong adlı üyeden alıntı: mesajı görüntüle
    Kardeşim bu örnek bir yöntemdir ve istediğin her şeye uyarlanabilir.
    ÇERÇEVE SETİ BAY BAY PK:991 e de yaparsın. Ara bul değiştir mantığı vardır burada.
    Kendine göre geliştirebilirsin.
    Eyvallah ama bu benim ihtiyacıma cevap vermez. Bu yöntem ile ancak for ve if kullanarak çalışır gibi. Bu da işlem süresini çok uzatır. Ben preg_replace ile yapılacak uygun regex ifadesini arıyorum.

    AYNA GÜLLÜ OVAL PLASTİK BEYAZ PK:25 KL:600
    AYNA GÜLLÜ OVAL PLASTİK FUŞYA PK:25 KL:600
    BALON AĞIRLIĞI 170 GRAM ALTIN PK:1 KL:72
    BALON AĞIRLIĞI 170 GRAM BAKIR PK:1
    BALON AĞIRLIĞI 170 GRAM BEYAZ PK:1
    BALON BASKILI 12 İNC 1+1 AYAKİZİ METALİK BEYAZA PEMBE PK:100 KL:50
    BALON BASKILI 12 İNC 1+1 AYAKİZİ METALİK PEMBE PK:100 KL:50

    Gibi ürün isimleri var. PK ifadelerini Paket ile değiştirdik diyelim. PK'dan sonra gelen sayıya dokunmayacak ve sayıdan sonra Adet ifadesini yazacak. KL:X ifadelerini de silecek.
  • 18-08-2019, 00:02:19
    #6
    regex101.com sitesini kullanarak bol bol antrenman yapın.

    <?php
    $string = 'AYNA GÜLLÜ OVAL PLASTİK BEYAZ PK:25 KL:600
    AYNA GÜLLÜ OVAL PLASTİK FUŞYA PK:25 KL:600
    BALON AĞIRLIĞI 170 GRAM ALTIN PK:1 KL:72
    BALON AĞIRLIĞI 170 GRAM BAKIR PK:1
    BALON AĞIRLIĞI 170 GRAM BEYAZ PK:1
    BALON BASKILI 12 İNC 1+1 AYAKİZİ METALİK BEYAZA PEMBE PK:100 KL:50
    BALON BASKILI 12 İNC 1+1 AYAKİZİ METALİK PEMBE PK:100 KL:50';
    
    $pattern = '/(.*) PK:(.*) KL:(.*)/im';
    echo preg_replace($pattern, '$1 PAKET $2 ADET', $string);
  • 18-08-2019, 00:19:35
    #7
    bayGaReZ adlı üyeden alıntı: mesajı görüntüle
    regex101.com sitesini kullanarak bol bol antrenman yapın.

    <?php
    $string = 'AYNA GÜLLÜ OVAL PLASTİK BEYAZ PK:25 KL:600
    AYNA GÜLLÜ OVAL PLASTİK FUŞYA PK:25 KL:600
    BALON AĞIRLIĞI 170 GRAM ALTIN PK:1 KL:72
    BALON AĞIRLIĞI 170 GRAM BAKIR PK:1
    BALON AĞIRLIĞI 170 GRAM BEYAZ PK:1
    BALON BASKILI 12 İNC 1+1 AYAKİZİ METALİK BEYAZA PEMBE PK:100 KL:50
    BALON BASKILI 12 İNC 1+1 AYAKİZİ METALİK PEMBE PK:100 KL:50';
    
    $pattern = '/(.*) PK:(.*) KL:(.*)/im';
    echo preg_replace($pattern, '$1 PAKET $2 ADET', $string);

    Çok teşekkürler. Aradığım şey tam da buydu.



    Bir şey daha var. Yukarıdaki ifadelerde KL: ile başlayanlar opsiyonel ise nasıl olacak. Yani bazılarında KL:x yok. İki aşamada yapsam olur ama. Daha kolay yolu vardı yanlış hatırlamıyorsam.
  • 18-08-2019, 00:30:55
    #8
    Pattern içindeki KL: (.*) kısmını kaldırmanız yeterli, çünkü bu kısmı zaten almıyoruz. Dolayısıyla o kısmı kaldırırsanız pattern'den sorunsuz çalışır. Şöyle ki, pattern değişkenini aşağıdaki gibi kullanın.
    $pattern = '/(.*) PK:(.*) (.*)/im';
    ErhanXk adlı üyeden alıntı: mesajı görüntüle
    Çok teşekkürler. Aradığım şey tam da buydu.
    Bir şey daha var. Yukarıdaki ifadelerde KL: ile başlayanlar opsiyonel ise nasıl olacak. Yani bazılarında KL:x yok. İki aşamada yapsam olur ama. Daha kolay yolu vardı yanlış hatırlamıyorsam.
  • 18-08-2019, 00:38:11
    #9
    bayGaReZ adlı üyeden alıntı: mesajı görüntüle
    Pattern içindeki KL: (.*) kısmını kaldırmanız yeterli, çünkü bu kısmı zaten almıyoruz. Dolayısıyla o kısmı kaldırırsanız pattern'den sorunsuz çalışır. Şöyle ki, pattern değişkenini aşağıdaki gibi kullanın.
    $pattern = '/(.*) PK:(.*) (.*)/im';
    Bu çalışmadı. PK:1 gibi bir ifadeden sonra başka bir karakter olsa çalışıyor. Ama ifade PK:1 ile bittiği için şartı sağlamıyor.

    Ama çok da sorun değil. İki aşamada yaparım. İlk aşamada KL:x ifadelerini silerim. Diğer aşamada PK kısmını düzenlerim. İşlemciye binen yük çok da değişmez gibi.