par
jojolapine » 03 févr. 2012, 13:26
Bonjour,
Pourquoi ne pas essayer de préparer tous les mots possibles au préalable, puis de construire la regex en fonction ? :
<?php
$chaine = 'Je suis médecin généraliste et medecin generaliste !';
$mots_recherches = array('médecin', 'généraliste');
$mots_surbrillance = array();
foreach( $mots_recherches as $mot){
$mots_surbrillance[] = preg_quote($mot);
$mots_surbrillance[] = preg_quote(removeAccents($mot));
}
$chaine = preg_match('#\b('.implode('|',$mots_surbrillance).')\b#i',' <span class="surbrillance">$1</span> ',$chaine);
function removeAccents($chaine){
return str_replace(
array('à','á','â','ã','ä','ç','è','é','ê','ë','ì','í','î','ï','ñ','ò','ó','ô','õ','ö','ù','ú','û','ü','ý','ÿ','À','Á','Â','Ã','Ä','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ñ','Ò','Ó','Ô','Õ','Ö','Ù','Ú','Û','Ü','Ý'),
array('a','a','a','a','a','c','e','e','e','e','i','i','i','i','n','o','o','o','o','o','u','u','u','u','y','y','A','A','A','A','A','C','E','E','E','E','I','I','I','I','N','O','O','O','O','O','U','U','U','U','Y'),
$chaine
);
}
Bonjour,
Pourquoi ne pas essayer de préparer tous les mots possibles au préalable, puis de construire la regex en fonction ? :
[php]<?php
$chaine = 'Je suis médecin généraliste et medecin generaliste !';
$mots_recherches = array('médecin', 'généraliste');
$mots_surbrillance = array();
foreach( $mots_recherches as $mot){
$mots_surbrillance[] = preg_quote($mot);
$mots_surbrillance[] = preg_quote(removeAccents($mot));
}
$chaine = preg_match('#\b('.implode('|',$mots_surbrillance).')\b#i',' <span class="surbrillance">$1</span> ',$chaine);
function removeAccents($chaine){
return str_replace(
array('à','á','â','ã','ä','ç','è','é','ê','ë','ì','í','î','ï','ñ','ò','ó','ô','õ','ö','ù','ú','û','ü','ý','ÿ','À','Á','Â','Ã','Ä','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ñ','Ò','Ó','Ô','Õ','Ö','Ù','Ú','Û','Ü','Ý'),
array('a','a','a','a','a','c','e','e','e','e','i','i','i','i','n','o','o','o','o','o','u','u','u','u','y','y','A','A','A','A','A','C','E','E','E','E','I','I','I','I','N','O','O','O','O','O','U','U','U','U','Y'),
$chaine
);
}
[/php]