• 10-10-2014, 14:57:00
    #1
    Merhaba,

    Merhaba arkadaşlar,
    Aşağıdaki string i aşağıdaki gibi parçalamak istiyorum.
    String sürekli değişecek arkadaşlar, kodun diğer farklı stringlerde de çalışması gerekli.

    String : 0108691234567890211113234246791710033110X2512061322

    [01] : 08691234567890
    [21] : 111323424679
    [17] : 100331
    [10] : X2512061322

    Arkadaşlar yapmaya çalıştığım olay şu :
    Barkod okuyucu ile okunan QR code aşağıdaki resimlerdeki gibi verileri veriyor.

    Bunu tek satırda yukarıdaki gibi veriyor.
    Benim aşağıdaki gibiverileri almak için parçalamam gerekli fakat parçaladığımda hep sıkıntı yaşıyorum. Aşağıda resimde " | " işaretini kullanmış yazılımcı fakat ben onun için replace etmem lazım, benzer verileri yanlış bir şekilde replace edebilirim.

    Bir alt resimde de aslında QR koddaki verinin ne olduğunu görebilirsiniz.



  • 10-10-2014, 15:04:06
    #2
    Programmer adlı üyeden alıntı: mesajı görüntüle
    Merhaba,

    Aşağıdaki kod ile elimdeki textdeki veri içerisinden veri almak istiyorum.
    Metinin sonunda yer alan "04T064" verisini almak için tam olarak ne tür bir regex kullanmalıyım?
    $kaynak = "0108699809037748210300006183577717170430104T064";
    preg_match('@010(.*?)21@si',$kaynak,$barkod);
    preg_match('@21(.*?)17@si',$kaynak,$siranumarasi);
    preg_match('@17(.*?)10@si',$kaynak,$skt);
    
    echo $barkod[1];
    echo "<br />";
    echo $siranumarasi[1];
    echo "<br />";
    echo $skt[1];
    echo "<br />";
    regex kodu
    [0-9]{2}[A-Za-z]{1}[0-9]{3}
    linkteki siteden inceleyebilirsiniz süslü parentez içindeki sayıları değiştirerek alınacak degerlerin sayısını artırabilir ve azaltabilirsiniz...


    http://www.phpliveregex.com/p/7kX
  • 10-10-2014, 15:06:00
    #3
    Programmer adlı üyeden alıntı: mesajı görüntüle
    Merhaba,

    Aşağıdaki kod ile elimdeki textdeki veri içerisinden veri almak istiyorum.
    Metinin sonunda yer alan "04T064" verisini almak için tam olarak ne tür bir regex kullanmalıyım?
    $kaynak = "0108699809037748210300006183577717170430104T064";
    preg_match('@010(.*?)21@si',$kaynak,$barkod);
    preg_match('@21(.*?)17@si',$kaynak,$siranumarasi);
    preg_match('@17(.*?)10@si',$kaynak,$skt);
    
    echo $barkod[1];
    echo "<br />";
    echo $siranumarasi[1];
    echo "<br />";
    echo $skt[1];
    echo "<br />";
    İyi de hocam tek stringden nasıl anlayabalım.
    Eğer hep son 6 karakter olacaksa regexe gerek yok
    substr ile sondan 6 karakteri kesip alabilirsin.
    yok 064 3 rakamdan fazla olabiliyorsa
    explode ile 04T0 ile kesersin, sonra arkasındaki stringi eklersin.
    regex yazmak için ortak patterni bilmek lazım.
    son 6 karakteri almak için regexe ihtiyacın yok.
  • 10-10-2014, 15:08:16
    #4
    Developer
    digiklan adlı üyeden alıntı: mesajı görüntüle
    İyi de hocam tek stringden nasıl anlayabalım.
    Eğer hep son 6 karakter olacaksa regexe gerek yok
    substr ile sondan 6 karakteri kesip alabilirsin.
    yok 064 3 rakamdan fazla olabiliyorsa
    explode ile 04T0 ile kesersin, sonra arkasındaki stringi eklersin.
    regex yazmak için ortak patterni bilmek lazım.
    son 6 karakteri almak için regexe ihtiyacın yok.
    ben de onu diyecektim. misal substr($kaynak, -6, 6); olarak alınabilir.
  • 10-10-2014, 15:46:08
    #5
    Hep 6 karakter değil maalesef ki.

    Şöyle ki sonuna virgül yada birşey ekleyip 2 veri arası almayı düşündüm fakat regex le aldığımda hep 2 tane verdi ve en bastan aldı.

    " 0108699809037748210300006183577717170430104T064, " arasındaki veriyi almaya çalıştım.

    preg_match('@10(.*?),@si',$kaynak,$skt); ile fakat hep en baştan aldı array a da .
  • 10-10-2014, 17:38:33
    #6
    Programmer adlı üyeden alıntı: mesajı görüntüle
    Hep 6 karakter değil maalesef ki.

    Şöyle ki sonuna virgül yada birşey ekleyip 2 veri arası almayı düşündüm fakat regex le aldığımda hep 2 tane verdi ve en bastan aldı.

    " 0108699809037748210300006183577717170430104T064, " arasındaki veriyi almaya çalıştım.

    preg_match('@10(.*?),@si',$kaynak,$skt); ile fakat hep en baştan aldı array a da .
    $str = '0108699809037748210300006183577717170430104T064';
    $str = explode('104T',$str);
    $str = '4T'.$str[1];
    sonra virgül varsa son satırı
    $str = '4T'.sre_replace(',','',$str[1]);
    olarak değiştir.
  • 10-10-2014, 17:49:36
    #7
    4T sabit değil ki

    10 ve virgül arasındaki veriyi almam gerekiyor.
  • 10-10-2014, 18:41:10
    #8
    Hocam şaşırtıcı bir şekilde bendeki bi projenin içerisinde aynı koda rastladım nasıl oldu bilmiyorum.

    bende bu tarz işlemler üzerinde çalışıyorum. C# ile parçalayıp Stok uygulamasına ekleyeceğim uzunluklar değişiyor ancak sondakiler sabit allahdan, banada bu tarz bi regex lazım yoksa substring ile baya bi uğraşmam gerekicek.bendeki örnek kod ise uzunlukları değişiyor ama sondakiler sabit bir şekilde

    9079 3900261 89984745 4100923473C22K356
  • 10-10-2014, 18:45:41
    #9
    Üyeliği durduruldu
    Ben başlığı çok farklı anlayıp gelmişim.

    Belirtmek istedim, pardon.