• 17-01-2021, 13:07:50
    #1
    Arkadaşlar merhaba,

    dünden beri text alanına yapıştırdığım yazıyı preg_match ile parçalamak istiyorum ancak satır başı sorununu bir türlü çözemedim ve yardım istemek zorunda kaldım.

    Örneğin aşağıdaki yazıyı text alanına yapıştırıp post ediyorum:

    SBM Kaza İhbar No:
    10947658
    
    Kaza Tarihi:
    20/04/2020 10:33
     
    İhbar Tarihi:
    05/05/2020 10:09
    daha sonra : karakterini işaret ederek preg_match ile parçalayıp dizi oluşturmaya çalışıyorum:

    preg_match('/: /',$line)
    ancak : karakterinden sonraki bilgi alt satırda olduğundan bilgiyi diziye aktaramıyorum. sonuç boş dönüyor:

    Çıktı:
    Array ( [SBM Kaza İhbar No] => [Kaza Tarihi] => [İhbar Tarihi] => )
    
    Yapmak istediğim:
    Array ( [SBM Kaza İhbar No] => 10947658 => [Kaza Tarihi] => 20/04/2020 10:33 => [İhbar Tarihi] => 05/05/2020 10:09 )
    : karakterinden sonra alt satırda kalan veriyi nasıl diziye aktarırım, yardımcı olabilecek var mı?
  • 17-01-2021, 13:12:54
    #2
    veriler hep aynı şekilde mi geliyor bilmiyorum fakat eğer bütün datalarınız yukarda verdiğiniz gibiyse regex kullanarak alabilirsiniz. örn
    SBM Kaza İhbar No:(.*?) Kaza Tarihi:
  • 17-01-2021, 13:20:11
    #3
    Öncelikle cevap için teşekkürler. Veriler aynı şekilde geliyor, regex de denedim ama bir türlü olmuyor, kullanım şeklim mi hatalı acaba ?

    preg_match('/: (.*?)/',$line);
  • 17-01-2021, 14:01:03
    #4
    şurdan bakabilirsiniz.
    https://paiza.io/projects/2hoDZ9RA_WHywHOr08mjgw
  • 17-01-2021, 14:06:44
    #5
    Evet bu şekilde 2 kriter arasındaki veriyi alabiliyoruz ama benim asıl yapmak istediğim ":" sol tarafındaki veriyi array değerine aktarmak, sağındaki veriyide karşılık gelen veriye aktarmak, yani şu şekilde kullanmak istiyorum, ama sağdaki veri satırbaşında kaldığından yapamıyorum:

    Array ( [SBM Kaza İhbar No] => 10947658 => [Kaza Tarihi] => 20/04/2020 10:33 => [İhbar Tarihi] => 05/05/2020 10:09 )
    echo $line['SBM Kaza İhbar No '] yazdığımda çıktının 10947658 olmasını istiyorum.

    Mümkün müdür acaba?

    ilginiz için çok teşekkür ederim.
  • 17-01-2021, 14:10:13
    #6
    Kimlik doğrulama veya yönetimden onay bekliyor.
      
    <?php
    $text = "SBM Kaza İhbar No:
    10947658
     
    Kaza Tarihi:
    20/04/2020 10:33
      
    İhbar Tarihi:
    05/05/2020 10:09";
    
    $str_regex = '/(.*):(\r\n|\r|\n)(.*)/';
    preg_match_all($str_regex, $text, $matches);
    
    foreach($matches[1] as $i => $value){
        var_dump($value); // Parametre
        var_dump($matches[3][$i]); // Değer
    }
    ?>
    yukarıdaki gibi çalışıyor olması gerekir
  • 17-01-2021, 14:29:53
    #7
    Evet sizin verdiğiniz örnek ile test ettim online demo da çalışıyor ama, benim kodlarıma entegre ettiğimde yine çalışmıyor. text parçalama kodum aşağıdaki gibi:

        
    $a = explode(PHP_EOL,$_POST['kayit']);            
    
    $bilgiler = array();          
     
    foreach($a as $line)    {            
            if(preg_match('/: /',$line))        
           {                
                     $line = explode(': ',$line);                
                     $key = trim($line[0]);              
                     $val = trim($line[1]);    
                          
                     if(array_key_exists($key,$bilgiler))            
                    {                
                            $bilgiler["$key-1"] = trim($line[1]);            
                     }             else             {                
                            $bilgiler["$key"] = trim($line[1]);            
                     }          
               }                
    }
    bu kod ile uyumlu hale getiremedim

    yardımlarınız için çok teşekkürler.


    Proxima adlı üyeden alıntı: mesajı görüntüle
      
    <?php
    $text = "SBM Kaza İhbar No:
    10947658
     
    Kaza Tarihi:
    20/04/2020 10:33
      
    İhbar Tarihi:
    05/05/2020 10:09";
    
    $str_regex = '/(.*):(\r\n|\r|\n)(.*)/';
    preg_match_all($str_regex, $text, $matches);
    
    foreach($matches[1] as $i => $value){
        var_dump($value); // Parametre
        var_dump($matches[3][$i]); // Değer
    }
    ?>
    yukarıdaki gibi çalışıyor olması gerekir