2010-08-24 22 views
1

Ma chaîne est dans une langue étrangère. J'utilise l'expression régulière suivante:Le modificateur i ne fonctionne pas avec les langues étrangères?

$str = 'մի քանի Բառ ձեր մասին'; 
$word = 'բառ'; 

$cont = preg_match_all("/.{0,80}[^\s]*?".preg_quote($word)."[^\s]*?.{0,80}/si",$str,$matched); 
print_r($matched);//returns Array ([0] => Array ()) .. 

.

... mais si je mets:

$word = "Բառ";//returns Array ([0] => Array ([0] => մի քանի Բառ ձեր մասին)) 

Que puis-je faire pour être en mesure d'utiliser le modificateur I en langues étrangères aussi?

+0

Quel est le but de ce code? Est-ce que vous essayez d'extraire le mot d'un texte plus leurs mots environnants? – Gumbo

+0

@Gumbo exactement. J'essaie d'extraire le mot et les mots environnants s'il y a même un sous-mot dans la chaîne. ce que vous pensez d'une telle solution? – Simon

+0

Je préfère diviser le texte en mots, trouver les mots qui sont ou contenir le mot recherché, puis obtenir les mots environnants. Ou si vous voulez utiliser 'preg_match_all', recherchez simplement le mot recherché et utilisez l'indicateur' PREG_OFFSET_CAPTURE' pour obtenir les offsets pour 'substr' (voir http://stackoverflow.com/questions/3306513). – Gumbo

Répondre

5

Essayez d'ajouter le modificateur u:

$cont = preg_match_all("/.{0,80}[^\s]*?".preg_quote($word)."[^\s]*?.{0,80}/siu",$str,$matched); 
+3

parfait. Merci beaucoup. Pourriez-vous expliquer pourquoi votre modificateur a une influence sur la langue? comme je le sais, il inverse seulement la gourmandise? – Simon

+4

@Syom: 'U' (majuscule) est pour une correspondance non gourmande et' u' (minuscule) pour interpréter le motif codé en UTF-8. Voir http://php.net/reference.pcre.pattern.modifiers. – Gumbo