Rechercher : dans
Par :

Problème de REGEX avec accents

Dernière réponse le 26 sep 2008 à 14:25:01 Thebuzz, le 15 sep 2008 à 01:54:49 
 Signaler ce message aux modérateurs

Bonjour chers tous,

J'ai un texte tiré d'une base de données contenant cette phrase par exemple :

<J'ai l'énorme probl&eagrave; dans ce codage et avec l'enroulement>

Mon REGEX suivant me permet d'accepter les accents :

"/[a-z-&;]{10,80}/i"

Mais mon affichage est :

l'énorme, problème, l'enroulement,

Mais j'aimerai pouvoir retirer <l'> pour n'afficher que :

énorme, problème, enroulement

Merci de votre aide

Configuration: Mozilla Indeterminable

Meilleures réponses pour « Problème de REGEX avec accents » dans :
Javascript - L'objet RegExp Voir Les particularités de l'objet RegExp L'objet RegExp est un objet permettant de manipuler des expressions régulières, c'est-à-dire des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, afin de trouver des...
Supprimer les accents avec PHP VoirPour un tas de raisons, il est parfois utile de convertir un texte accentué en un texte sans accents. Voici une fonction permettant de transformer très simplement la quasi-totalité des accents en leur équivalent non-accentués : function...
Utiliser des accents et autres caractères spéciaux VoirDans la plupart des langages de programmation, on ne peut utiliser directement les accents et autres caractères non-anglosaxon. La solution est l'unicode, une sorte de code universel. Par exemple pour afficher la chaine de caractères : " là, ça...
Google - Minuscules, majuscules, accents, pluriels VoirGoogle ne tient pas compte de la casse des caractères. Donc que vous utilisiez des majuscules, des minuscules ou les 2 mélangées vous obtiendrez les mêmes résultats. Google ne tient pas compte des accents, cédilles, tildes espagnols… Ainsi, une...

1

mamiemando, le 15 sep 2008 à 10:29:15

Il suffit que ton expression régulière ne "catche" que la partie enroulement. Tu auras le même problème avec "qu'" ceci dit. Je ne connais pas trop la synataxe du langage que tu utilises mais en pcre ça ressemblerait à :

(l')?([a-zA-Z]*)

Bonne chance

Répondre à mamiemando

2

Thebuzz, le 15 sep 2008 à 12:36:53

Salut mamiemando,

Merci pour ton aide, mais c'est pas fonctionnel. Je m'explique pourquoi :

Mon code ci-dessous est tiré d'une requête SQL avec des données qui ont été modifiées par un remplacement é=>é à=>à, etc...

$q=mysql_query("SELECT products_description FROM description where products_id = 1);
$r=mysql_fetch_array($q);
$texte=$r['products_description'];


Mon code reprend donc cette valeur est doit retourner l'inverse é => é, d'où le &; dans le REGEX. De plus, mon code doit afficher que les mots trouvés contenant un minimum de 5 caractères pour ensuite retirer les doublons et afficher le tout :
if(false !== preg_match_all("/[a-z-&;]{5,80}/i", $texte, $matches)) {
	if(is_array($matches[0]) && sizeof($matches[0])>0) {
		$matches = array_unique($matches[0]);
	}
	
	foreach($matches as $a => $match) {
		$resultats .= $match. ', ';
	}
}


Tout mon code fonctionne, sauf que j'aimerais retirer les types <l'>, <d'>

Cependant, il serait préférable de retourner ma variable $texte, dès le départ, en trouvant tous les équivalents HTML et remettre le codage normal du type é => é, etc...

Merci de votre aide encore

Répondre à Thebuzz

3

mamiemando, le 15 sep 2008 à 20:59:27

Pour moi c'est juste un traitement supplémentaire sur ton mot (une fois celui-ci extrait). Par exemple

tapir => tapir
l'arbre => arbre

Le rôle de l'expression régulière que je t'ai donné consiste à catcher l' (au même titre que d', qu' etc...) de sorte à n'extraire que le second mot. Ca ne remet en rien en cause le reste de ton code.

Bonne chance

Répondre à mamiemando

4

Thebuzz, le 16 sep 2008 à 08:31:01

Tu as raison pour le catch, toutefois - on ne peut le voir - tous les accents et apostrophes sont formatés avec le codage html &...;

Mon ennui viens donc d'éviter de catcher les l&ap..; mais de catcher les autres codes tel &ea...;=>é &eg...;=>è, etc...

C'est en fait mon ennui car l'affiche se fait - pas tout à fait - correctement avec ces réponses selon ma requête {5,80} :

r&ea...;pondeur = répondeur
acc&eg...;s = accès

mais l&ap...;erreur = l'erreur, ne devrait prendre que = erreur. Donc seul les valeurs &ap...; et &#...; qui sont des apostrophes ne doivent pas être catchés.

J'espère pouvoir trouver une solution, merci

A+

Répondre à Thebuzz

5

mamiemando, le 16 sep 2008 à 10:05:46

Ben ton expression régulière sera juste un truc du genre

(((l|d|qu)(&ap...;|'))?)([a-zA-Z&;]*)

Non ? En remplaçant &ap...; par la bonne balise HTML. Sinon au lieu de faire une expression régulière tu traites directement la chaîne en recherchant le motif apostrophe.

Répondre à mamiemando

6

Thebuzz, le 16 sep 2008 à 13:50:38

Merci de tes efforts, mais toujours pas le résultat escompté.

Toutefois, la seule solution pour moi, et qui est fonctionnelle, est de mettre un espace après l'apostrophe de ce style :

l' apostrophe

Comme ceci, mon REGEX

"/(((l|d|qu|jusqu)(&#39;|'))?)([a-zA-Z&;]{5,50})/"
est en partie ok, puisqu'il m'affiche :

l&#...39; apostrophe = apostrophe ( car plus petit que 5 )
s&e...acute;paration = séparation


Merci encore et peut-être que je trouverais plus tard.

A+

Répondre à Thebuzz

7

mamiemando, le 16 sep 2008 à 14:45:04

Au pire tu le fais en deux temps.
- Une première regexp qui filtre les l'/d'/qu'...
- et une seconde qui une fois le mot nettoyé, vérifie que la seconde moitié fait plus de 5 caractères.

En fait dans quel cas ta regexp actuelle ne marche pas ?

Répondre à mamiemando

8

Thebuzz, le 16 sep 2008 à 16:15:07

Merci encore pour te pencher sur mon prob,

Effectivement uniquement sur les apostrophes, car le format est :

l&#...39;apostrophe = l'apostrophe

et mon affichage selon mon code est = 'apostrophe

C'est le code &#...39; correspondant à l'apostrophe qui n'est pas correctement retiré

A+

Répondre à Thebuzz

9

Thebuzz, le 16 sep 2008 à 16:53:06

Salut pour terminer,

J'ai résolu mon souci...

En fait, j'ai pris depuis la souche, le résultat de ma requête et je remplace le fameux caractère &#...39; par un espace.

est le REGEX est ensuite :

"/(((l&apos;|d&apos;|qu&apos;|jusqu&apos;)('))?)([a-zA-Z&;]{5,50})/"


Tout baigne dans la place....


Merci à toi, mamiemando, pour ton aide qui m'a permis de forcer le passage

MERCI

A+

Répondre à Thebuzz

10

 mamiemando, le 16 sep 2008 à 20:06:22

Parfait, félicitations pour avoir résolu ton problème :-)

Bonne continuation

Répondre à mamiemando