• 24-08-2017, 12:11:41
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Merhaba,
    Aradığım kelimenin öncesini ve sonrasını aşağıdaki örnekteki gibi silmek istiyorum.
    $kayit='<p> Adı Ahmet Soyadı Kurt	T.C. Kimlik no: 12345678910</p><p> Adı Ayşe Soyadı Sarı	T.C. Kimlik no: 12345678912</p><p> Adı Murat Soyadı Yıldız	T.C. Kimlik no: 12345678914</p><p> Adı Selim Soyadı Demir	T.C. Kimlik no: 12345678916</p>';
    
    $aranan="Yıldız";
    
    // aşağıdaki kodu yazdım ama, bu kod, 3 satırdaki Yıldız'ı gördüğünde ilk 3 kaydı siliyor doğal olarak...
    preg_match_all('@Soyadı(.*?)T.C. Kimlik no:@si', $kayit, $soyisimler);
    foreach ($soyisimler[1] as $soyisim) {
    if (strpos($soyisim, $aranan)!==false) {
    	$kayit= preg_replace('@<p> Adı(.*?)Soyadı'.$soyisim.'T.C. Kimlik no:(.*?)</p>@si', '', $kayit);
    
    }
    }
    print_r($kayit);
    Örnekte Yıldız soyisimli kayıtları arıyorum. İsteğim ise bu soyisme sahip kayıt bulunduğunda, şu kısmın metinden silinmesi.
    <p> Adı Murat Soyadı Yıldız	T.C. Kimlik no: 12345678914</p>

    Örnek Kayıt:
    <p> Adı Ahmet Soyadı Kurt T.C. Kimlik no: 12345678910</p>
    <p> Adı Ayşe Soyadı Sarı T.C. Kimlik no: 12345678912</p>
    <p> Adı Murat Soyadı Yıldız T.C. Kimlik no: 12345678914</p>
    <p> Adı Selim Soyadı Demir T.C. Kimlik no: 12345678916</p>

    Yukarıdaki kayıtta "Yıldız" ı arattığımda metin aşağıdaki gibi olmalı.
    <p> Adı Ahmet Soyadı Kurt T.C. Kimlik no: 12345678910</p>
    <p> Adı Ayşe Soyadı Sarı T.C. Kimlik no: 12345678912</p>

    <p> Adı Selim Soyadı Demir T.C. Kimlik no: 12345678916</p>
    Yardımcı olabilecek var mı?
  • 24-08-2017, 12:16:08
    #2
    Üyeliği durduruldu
    Asıl soru şu, aynı soy isme sahip 2 kayıt mevcut ise ne yapılmalı ? Sadece birinci olan mı değerlendirilecek ? Örneklendirme biraz garip olmuş. Şu şekilde örneklendirir misin ?

    <p> Adı Ahmet Soyadı Yıldız T.C. Kimlik no: 12345678910</p>
    <p> Adı Ayşe Soyadı Demir T.C. Kimlik no: 12345678912</p>
    <p> Adı Murat Soyadı Yıldız T.C. Kimlik no: 12345678914</p>
    <p> Adı Selim Soyadı Demir T.C. Kimlik no: 12345678916</p>

    Eğer ki Yıldızı aratırsam,

    <p> Adı Ahmet Soyadı Yıldız T.C. Kimlik no: 12345678910</p>
    <p> Adı Murat Soyadı Yıldız T.C. Kimlik no: 12345678914</p>

    Sonuç bu olacak, gibi.
  • 24-08-2017, 12:22:16
    #3
    mertotrk adlı üyeden alıntı: mesajı görüntüle
    Asıl soru şu, aynı soy isme sahip 2 kayıt mevcut ise ne yapılmalı ? Sadece birinci olan mı değerlendirilecek ? Örneklendirme biraz garip olmuş. Şu şekilde örneklendirir misin ?

    <p> Adı Ahmet Soyadı Yıldız T.C. Kimlik no: 12345678910</p>
    <p> Adı Ayşe Soyadı Demir T.C. Kimlik no: 12345678912</p>
    <p> Adı Murat Soyadı Yıldız T.C. Kimlik no: 12345678914</p>
    <p> Adı Selim Soyadı Demir T.C. Kimlik no: 12345678916</p>

    Eğer ki Yıldızı aratırsam,

    <p> Adı Ahmet Soyadı Yıldız T.C. Kimlik no: 12345678910</p>
    <p> Adı Murat Soyadı Yıldız T.C. Kimlik no: 12345678914</p>

    Sonuç bu olacak, gibi.
    soyisimleri tekil hale getirdim. Her soyisim kayıtta sadece bir tane var şeklinde düşünülebilir.
  • 24-08-2017, 13:35:58
    #4
    Üyeliği durduruldu
    vatanyazilim adlı üyeden alıntı: mesajı görüntüle
    soyisimleri tekil hale getirdim. Her soyisim kayıtta sadece bir tane var şeklinde düşünülebilir.
    Normal de böyle bir yapı kullanmam, kullanmakta çok gereksiz. Ancak size lazım diye hazırladım, şu şekilde kullanabilirsiniz.

    $kayit='<p> Adı Ahmet Soyadı Kurt	T.C. Kimlik no: 12345678910</p><p> Adı Ayşe Soyadı Yıldız T.C. Kimlik no: 12345678912</p><p> Adı Murat Soyadı Yıldız	T.C. Kimlik no: 12345678914</p><p> Adı Selim Soyadı Demir	T.C. Kimlik no: 12345678916</p>';
    function sil($kayit, $g,$tag,$tagbitis){
    	preg_match_all("/$g/s", $kayit, $soyisimler,PREG_OFFSET_CAPTURE);
    	if($soyisimler):
    		$ha = array();
    		foreach($soyisimler[0] as $k):
    			$before = str_split($kayit, $k[1]);
    			$h = @reset(explode($tagbitis, $before[1]));
    			$c = @end(explode($tag, $before[0]));
    			$l = $tag.$c.$h.$tagbitis;		
    			if(@strlen($l) > 0) $ha[] = $l;
    		endforeach;
    		$kayit = str_replace($ha, "", $kayit);
    	endif;
            return $kayit;
    }
    echo sil($kayit, "Demir", "<p>", "</p>");

    Yukarıda ki kod da mantık hatası olmuş, bunu kullanabilirsin.

    $kayit='<p> Adı Ahmet Soyadı Kurt	T.C. Kimlik no: 12345678910</p><p> Adı Ayşe Soyadı Yıldız T.C. Kimlik no: 12345678912</p><p> Adı Murat Soyadı Yıldız	T.C. Kimlik no: 12345678914</p><p> Adı Selim Soyadı Demir	T.C. Kimlik no: 12345678916</p>';
    function sil($kayit, $g,$tag,$tagbitis){
    	preg_match_all("/$g/s", $kayit, $soyisimler,PREG_OFFSET_CAPTURE);
    	if($soyisimler):
    		$ha = array();
    		foreach($soyisimler[0] as $k):
    			$before = substr($kayit, 0, $k[1]);
    			$h = @end(explode($tagbitis, $before));
    			$before = substr($kayit, $k[1], strlen($kayit));
    			$c = @reset(explode($tag, $before));
    			$l = $h.$c;		
    			if(@strlen($l) > 0) $ha[] = $l;
    		endforeach;
    		$kayit = str_replace($ha, "", $kayit);
    	endif;
    	return $kayit;
    }
    echo sil($kayit, "Soyadı Yıldız", "<p>", "</p>");
  • 24-08-2017, 13:57:52
    #5
    mertotrk adlı üyeden alıntı: mesajı görüntüle
    Normal de böyle bir yapı kullanmam, kullanmakta çok gereksiz. Ancak size lazım diye hazırladım, şu şekilde kullanabilirsiniz.

    $kayit='<p> Adı Ahmet Soyadı Kurt	T.C. Kimlik no: 12345678910</p><p> Adı Ayşe Soyadı Yıldız T.C. Kimlik no: 12345678912</p><p> Adı Murat Soyadı Yıldız	T.C. Kimlik no: 12345678914</p><p> Adı Selim Soyadı Demir	T.C. Kimlik no: 12345678916</p>';
    function sil($kayit, $g,$tag,$tagbitis){
    	preg_match_all("/$g/s", $kayit, $soyisimler,PREG_OFFSET_CAPTURE);
    	if($soyisimler):
    		$ha = array();
    		foreach($soyisimler[0] as $k):
    			$before = str_split($kayit, $k[1]);
    			$h = @reset(explode($tagbitis, $before[1]));
    			$c = @end(explode($tag, $before[0]));
    			$l = $tag.$c.$h.$tagbitis;		
    			if(@strlen($l) > 0) $ha[] = $l;
    		endforeach;
    		$kayit = str_replace($ha, "", $kayit);
    	endif;
            return $kayit;
    }
    echo sil($kayit, "Demir", "<p>", "</p>");

    Yukarıda ki kod da mantık hatası olmuş, bunu kullanabilirsin.

    $kayit='<p> Adı Ahmet Soyadı Kurt	T.C. Kimlik no: 12345678910</p><p> Adı Ayşe Soyadı Yıldız T.C. Kimlik no: 12345678912</p><p> Adı Murat Soyadı Yıldız	T.C. Kimlik no: 12345678914</p><p> Adı Selim Soyadı Demir	T.C. Kimlik no: 12345678916</p>';
    function sil($kayit, $g,$tag,$tagbitis){
    	preg_match_all("/$g/s", $kayit, $soyisimler,PREG_OFFSET_CAPTURE);
    	if($soyisimler):
    		$ha = array();
    		foreach($soyisimler[0] as $k):
    			$before = substr($kayit, 0, $k[1]);
    			$h = @end(explode($tagbitis, $before));
    			$before = substr($kayit, $k[1], strlen($kayit));
    			$c = @reset(explode($tag, $before));
    			$l = $h.$c;		
    			if(@strlen($l) > 0) $ha[] = $l;
    		endforeach;
    		$kayit = str_replace($ha, "", $kayit);
    	endif;
    	return $kayit;
    }
    echo sil($kayit, "Soyadı Yıldız", "<p>", "</p>");
    Tam istediğim gibi olmuş.Çok teşekkür ederim.
  • 24-08-2017, 18:49:26
    #6
    @mertotrk;
    Bazı yazıların kaybolduğunu farkettim,
    Biraz dikkat ettiğimde, kodun silme işlemini bir sonraki başlangıca kadar yaptığını gördüm.
    Örnek:
    $kayit='<p> Adı Ahmet Soyadı Kurt T.C. Kimlik no: 12345678910</p><p> Adı Ayşe Soyadı Yıldız T.C. Kimlik no: 12345678912</p>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<p> Adı Murat Soyadı duru T.C. Kimlik no: 12345678914</p><p> Adı Selim Soyadı Demir T.C. Kimlik no: 12345678916</p>';
    sil($kayit, "Yıldız", "<p>", "</p>");

    uygulandığında aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa yazısı da silinmiş oluyor...Mümkünse bir sonraki başlangıca kadar değil de, bitiş tagına kadar olan yeri (başlangıç ve bitiş tagı dahil) sildirebilir misiniz?
  • 24-08-2017, 18:55:55
    #7
    Üyeliği durduruldu
    vatanyazilim adlı üyeden alıntı: mesajı görüntüle
    @mertotrk;
    Bazı yazıların kaybolduğunu farkettim,
    Biraz dikkat ettiğimde, kodun silme işlemini bir sonraki başlangıca kadar yaptığını gördüm.
    Örnek:
    $kayit='<p> Adı Ahmet Soyadı Kurt T.C. Kimlik no: 12345678910</p><p> Adı Ayşe Soyadı Yıldız T.C. Kimlik no: 12345678912</p>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<p> Adı Murat Soyadı duru T.C. Kimlik no: 12345678914</p><p> Adı Selim Soyadı Demir T.C. Kimlik no: 12345678916</p>';
    sil($kayit, "Yıldız", "<p>", "</p>");

    uygulandığında aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa yazısı da silinmiş oluyor...Mümkünse bir sonraki başlangıca kadar değil de, bitiş tagına kadar olan yeri (başlangıç ve bitiş tagı dahil) sildirebilir misiniz?

    function sil($kayit, $g,$tag,$tagbitis){
    	preg_match_all("/$g/s", $kayit, $soyisimler,PREG_OFFSET_CAPTURE);
    	if($soyisimler):
    		$ha = array();
    		foreach($soyisimler[0] as $k):
    			$before = substr($kayit, 0, $k[1]);
    			$h = @end(explode($tag, $before));
    			$before = substr($kayit, $k[1], strlen($kayit));
    			$c = @reset(explode($tagbitis, $before));
    			$l = $tag.$h.$c.$tagbitis;		
    			if(@strlen($l) > 0) $ha[] = $l;
    		endforeach;
    		$kayit = str_replace($ha, "", $kayit);
    	endif;
    	return $kayit;
    }
    $kayit='<p> Adı Ahmet Soyadı Kurt T.C. Kimlik no: 12345678910</p><p> Adı Ayşe Soyadı Yıldız T.C. Kimlik no: 12345678912</p>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<p> Adı Murat Soyadı duru T.C. Kimlik no: 12345678914</p><p> Adı Selim Soyadı Demir T.C. Kimlik no: 12345678916</p>';
    echo sil($kayit, "Yıldız", "<p>", "</p>");
    Şu şekilde kullanabilrisiniz
  • 24-08-2017, 21:24:13
    #8
    mertotrk adlı üyeden alıntı: mesajı görüntüle
    function sil($kayit, $g,$tag,$tagbitis){
    	preg_match_all("/$g/s", $kayit, $soyisimler,PREG_OFFSET_CAPTURE);
    	if($soyisimler):
    		$ha = array();
    		foreach($soyisimler[0] as $k):
    			$before = substr($kayit, 0, $k[1]);
    			$h = @end(explode($tag, $before));
    			$before = substr($kayit, $k[1], strlen($kayit));
    			$c = @reset(explode($tagbitis, $before));
    			$l = $tag.$h.$c.$tagbitis;		
    			if(@strlen($l) > 0) $ha[] = $l;
    		endforeach;
    		$kayit = str_replace($ha, "", $kayit);
    	endif;
    	return $kayit;
    }
    $kayit='<p> Adı Ahmet Soyadı Kurt T.C. Kimlik no: 12345678910</p><p> Adı Ayşe Soyadı Yıldız T.C. Kimlik no: 12345678912</p>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<p> Adı Murat Soyadı duru T.C. Kimlik no: 12345678914</p><p> Adı Selim Soyadı Demir T.C. Kimlik no: 12345678916</p>';
    echo sil($kayit, "Yıldız", "<p>", "</p>");
    Şu şekilde kullanabilrisiniz
    Süper oldu. Çok sağolun...