2012-10-25 3 views
0

Je suis en train de faire ce qui suit:PHP obtenir 10 mots dans une phrase de recherche

saisir 5 mots avant l'expression de recherche (ou Y, s'il n'y a que des mots Y at-il) et 5 mots après l'expression de recherche (ou y s'il n'y a que des mots y at-il) d'un bloc de texte (quand je dis des mots que je veux dire des mots ou des chiffres ce qui est dans le bloc de texte)

par exemple

le bloc de texte: « Bienvenue à la pile Débordement! Visitez votre page d'utilisateur pour définir votre nom et votre adresse e-mail. "

si vous étiez à la recherche « visiter votre » il retourne: « Bienvenue sur Stack Overflow Visitez votre page utilisateur pour définir votre »

J'ai essayé d'utiliser cette

$preg_safe = str_replace(" ", "\s", preg_quote($search)); 
$pattern = "/(\w*\S\s+){0,8}\S*\b($preg_safe)\b\S*(\s\S+){0,8}/ix"; 
if(preg_match_all($pattern, $full_text, $matches)) 
{ 
    $result = str_replace(strtolower($search), "<span class='searched-for'>$search</span>", strtolower($matches[0][0])); 
} 
else 
{ 
    $result = false; 
} 

Et fonctionne si la phrase de recherche est en anglais, mais j'en ai besoin pour travailler dans d'autres langues. Cela ne fonctionne pas pour une phrase de recherche en hébreu par exemple.

J'ai essayé de changer le modèle à:

$pattern = "(*UTF8)/(\w*\S\s+){0,8}\S*\b($preg_safe)\b\S*(\s\S+){0,8}/i"; 

Mais cela n'a pas fonctionné.

Comment puis-je le faire fonctionner pour d'autres langues?

////////////////// EDIT //////////

Comme enrico.bacis a suggéré - j'ai changé le modèle de :

$pattern = "/(\w\p{Hebrew}*\S\s+){0,20}\S*\b($preg_safe)\b\S*(\s\S+){0,20}/ixu"; 

maintenant, il travaille pour des expressions de recherche en anglais et en hébreu, mais le texte de résultat est coupé quand il y a un caractère spécial (» par exemple).

Comment faire en sorte que le motif renvoie le texte autour de la phrase de recherche même s'il contient des caractères spéciaux?

Répondre

1

Votre problème est sur le \w qui ne correspond pas aux caractères hébreux, en fait \w est juste un raccourci pour un soi-disant "mot" caractère: [A-Za-z0-9_].

Pour faire une regex capable de capturer aussi des caractères hébreux il vous suffit de faire deux changements:

  • Ajouter u au modificateur de gérer des caractères UTF8 (de sorte que votre modificateur sera /ixu)

  • Remplacez [\w\p{Hebrew}] pour chaque occurrence de \w dans votre motif.

Vous pouvez également consulter here pour plus de réponses à ce sujet.

+0

Je l'ai besoin de travailler pour l'hébreu et l'anglais et à l'avenir il y aura d'autres langues ainsi – Shani1351

+0

Je l'ai mieux expliqué, vérifiez maintenant –

+0

Merci pour votre réponse.S'il vous plaît voir la section d'édition dans la question d'origine – Shani1351

Questions connexes