v2.5.2
Giriş yap

REGEXP hata ( Google tarzı arama sonucu gösterme(kelimenin geçtiği cümleyi gösterme) )

struggler
496 defa görüntülendi ve 1 kişi tarafından değerlendirildi

Googleda örneğin bir kelime girerek arama yaptığımızda sonuçlar aşağıdaki şekilde listeleniyor.
title
url
description

Description kısmında aranan kelimenin/kelimelerin geçtiği CÜMLELER vb. listeleniyor

Benzer yapıyı aşağıdaki regex komutuyla yapmayı denedim ancak arama yapılacak metinde değişiklik yapınca mesela karakter eksiltince nedenini anlamadığım bir hatayla karşılaştım hatanın nedeni veya çözümü

veyahut alternatif bir regex yazabilecek bi babayiğit arkadaşımız var mıdır :) ?

Varsa şimdiden teşekkürler

HATALI KOD

<?php
    $aranan = 'asd';
	$metin = 'Deneme Deneme Deneme xxxxxxxxxx1 Deneme Deneme Deneme Deneme Deneme Deneme Deneme Deneme Deneme Denemeeeeee Denemee Denemee Deneme Deneme Deneme Deneme Denemeeeeeeeee Deneme Deneme Denemeeeeeeeeeeee';
	$ayrac = '(?:[!?.;]+)';
	$regex = '(?:[^!?.d]|d*.?d+)*';
	preg_match_all("#{$ayrac}({$regex}{$aranan}{$regex})(?={$ayrac})#si", '!'.$metin, $dizi);
	var_dump($dizi);
	/*
	    ÇIKTISI
	    Bu siteye ulaşılamıyor
	    ERR_CONNECTION_RESET
	*/
?>

HATANIN OLMADIĞI KISIM

<?php
    $aranan = 'asd';
	$metin = 'Deneme Deneme Deneme xxxxxxxxxx Deneme Deneme Deneme Deneme Deneme Deneme Deneme Deneme Deneme Denemeeeeee Denemee Denemee Deneme Deneme Deneme Deneme Denemeeeeeeeee Deneme Deneme Denemeeeeeeeeeeee';
	$ayrac = '(?:[!?.;]+)';
	$regex = '(?:[^!?.d]|d*.?d+)*';
	preg_match_all("#{$ayrac}({$regex}{$aranan}{$regex})(?={$ayrac})#si", '!'.$metin, $dizi);
	var_dump($dizi);
	/*
	    ÇIKTISI
	    Aranan kelime metin içerisinde geçmediği için
	    Dizi boş gelsede sorun yok çalışıyor.
	*/
?>
Cevap yaz
Cevaplar (1)
tayfunerbilen
1235 gün önce

şöyle bir fonksiyon yazdım senin için

function highlight($string, $keyword){
    return preg_replace('/(' . $keyword . ')/iu', '<mark>$1</mark>', $string);
}

kullanırkende

$string = 'prototurk.com. Prototürkte yer alan, web dilleriyle ilgili referans JSON dosyalarının yer aldığı repodur. Siz de bu reponun gelişmesine katkı ProTotÜrk sağlayarak Türkçe';
$keyword = 'prototurk';

echo highlight($string, $keyword);

bu sana şöyle bir çıktı verir

gördüğün gibi aradığım kelime prototurk olduğu için Prototürk ve ProTotÜrk ile eşleşmedi. O yüzden ufak bir düzenleme yapıp şöyle denersen;

function highlightTurkish($string, $keyword){
    $characters = ['(ü|u)', '(ö|o)', '(ğ|g)', '(ı|i)', '(ç|c)'];
    $keyword = str_replace(
        ['u', 'o', 'g', 'ı', 'c', 'ü', 'ö', 'ğ', 'i', 'ç'],
        array_merge($characters, $characters),
        mb_strtolower($keyword, 'UTF-8')
    );
    return preg_replace('/(' . $keyword . ')/iu', '<mark>$1</mark>', $string);
}

ve şöyle kullanırsan

$string = 'prototurk.com. Prototürkte yer alan, 
web dilleriyle ilgili referans JSON dosyalarının
 yer aldığı repodur. Siz de bu reponun gelişmesine katkı ProTotÜrk sağlayarak Türkçe';
$keyword = 'prototurk';

echo highlightTurkish($string, $keyword);


başarı kaçınılmaz oluyor :) kolay gelsin.