• 01-03-2019, 13:05:29
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    merhaba arkadaşlar değişkende bir yazım var ve ben bunları gruplayıp diziye aktarmak istedim ama olmadı

    örnek olsun diye yazdım normalde 335 ve lira döngü içinde değişebiliyor

    <?php 
    
    	$yazi = "335 lira";
    	
    	preg_match_all("#(.*?) (.*?)#",$yazi,$bol);
    	
    	print_r($bol);
    	
    	
    ?>
    yukarıdaki kod 335 i grupluyor ama lirayı neden görmezden geliyor

    çıktısı
    Array
    (
        [0] => Array
            (
                [0] => 335 
            )
    
        [1] => Array
            (
                [0] => 335
            )
    
        [2] => Array
            (
                [0] => 
            )
    
    )
  • 01-03-2019, 13:24:35
    #2
    Eğer soruyu doğru anladıysam bu şekilde yapmak daha mantıklı değil mi?

    $text = '335 Lira';
    
    $exp = explode(' ', $text); print_r($exp)
  • 01-03-2019, 13:43:49
    #3
    FSahin adlı üyeden alıntı: mesajı görüntüle
    Eğer soruyu doğru anladıysam bu şekilde yapmak daha mantıklı değil mi?

    $text = '335 Lira';
    
    $exp = explode(' ', $text); print_r($exp)
    teşekkürler istediğim gibi oldu ancak normalde benim yaptığım şekilde pregmatch neden gruplamadı mantıken oda yapmalı diye düşünüyordum
  • 01-03-2019, 14:08:25
    #4
    preg_match_all("#^(\d+?)\s(\w+?)$#", $yazi, $bol);
    yukarıdaki desen işinizi görecektir.
  • 01-03-2019, 15:22:50
    #5
    Hocam preg_match'in çalışması için başlangıç ve bitişin belirlenmesi gereklidir.Sizin kodunuzu inceleyecek olursak

    <?php  
    
        $yazi = "335 lira"; 
         
        preg_match_all("#(.*?) (.*?)#",$yazi,$bol); 
         
        print_r($bol);
    Hepsini tek tek açıklayalım.
    () Bu gurupla demek
    .*? Tüm karakterleri al demek.
    # Zaten başlangıç ve bitişi belirtmek için.

    Şimdi kodumuz neden çalışmadı çünkü
    İlk grupta yani (.*?) tüm karakterleri al dedik.Ama nereye kadar alacak işte sizin bıraktığınız boşluğa kadar alacak.Yani 12345abc lira 12345abc'yi alır boşluk görünce durur.
    İkinci gurup hiç çalışmadı çünkü tamam hepsini al dedik yine ama nereye kadar alacak belirtmedik.
    Yani .*? kullanırken duracağı yeri belirtmemiz lazım siz () bundan sonran boşluk bıraktığınız için orada durdu.

    Peki nasıl çalışır.

    $yazi = "335 lira";
         
        preg_match_all("#(.*?) (w+)#",$yazi,$bol);
         
        print_r($bol);
    Yeni kodu açıklayalım.
    w Harfleri al (Türkçe karakterleri almaz)
    + ise birden fazla kez tekrar edebilir demek.

    1. yine çalıştı boşluğu gördü şimdi diyebilirsinizki 2. nasıl çalıştı durdurmak için bir şey yazmadım.Aslında w+ bu kod kendi içinde başlayacağı ve duracağı yeri belirtiyor nasıl yani şöyle benim kelimem abcdefg olsun regex'imde w+ idi yani bu kod ile ona harf ile başla harf ile bit demek istedim. a ile başka g harfi ile bit.

    İyi forumlar.Umarım anlatabilmişimdir.
  • 02-03-2019, 15:15:52
    #6
    Alkoz adlı üyeden alıntı: mesajı görüntüle
    Hocam preg_match'in çalışması için başlangıç ve bitişin belirlenmesi gereklidir.Sizin kodunuzu inceleyecek olursak

    <?php  
    
        $yazi = "335 lira";
        
        preg_match_all("#(.*?) (.*?)#",$yazi,$bol);
        
        print_r($bol);
    Hepsini tek tek açıklayalım.
    () Bu gurupla demek
    .*? Tüm karakterleri al demek.
    # Zaten başlangıç ve bitişi belirtmek için.

    Şimdi kodumuz neden çalışmadı çünkü
    İlk grupta yani (.*?) tüm karakterleri al dedik.Ama nereye kadar alacak işte sizin bıraktığınız boşluğa kadar alacak.Yani 12345abc lira 12345abc'yi alır boşluk görünce durur.
    İkinci gurup hiç çalışmadı çünkü tamam hepsini al dedik yine ama nereye kadar alacak belirtmedik.
    Yani .*? kullanırken duracağı yeri belirtmemiz lazım siz () bundan sonran boşluk bıraktığınız için orada durdu.

    Peki nasıl çalışır.

    $yazi = "335 lira";
        
        preg_match_all("#(.*?) (w+)#",$yazi,$bol);
        
        print_r($bol);
    Yeni kodu açıklayalım.
    w Harfleri al (Türkçe karakterleri almaz)
    + ise birden fazla kez tekrar edebilir demek.

    1. yine çalıştı boşluğu gördü şimdi diyebilirsinizki 2. nasıl çalıştı durdurmak için bir şey yazmadım.Aslında w+ bu kod kendi içinde başlayacağı ve duracağı yeri belirtiyor nasıl yani şöyle benim kelimem abcdefg olsun regex'imde w+ idi yani bu kod ile ona harf ile başla harf ile bit demek istedim. a ile başka g harfi ile bit.

    İyi forumlar.Umarım anlatabilmişimdir.
    ders anlatır gibi süper açıklama yapmışsın hocam eline emeğine sağlık çok sağol