Discussion:
regexp les petits mots accentues
(trop ancien pour répondre)
denisb
2007-03-10 10:07:58 UTC
Permalink
bonjour,

je bute sur une regexp que je n'arrive pas à définir/mettre en oeuvre.

à partir d'une phrase du type (hors « ») :
«façade néo molière d'el "niño" <ou> 495 ; naïve tschüß 806,19 (mao)
l'éléphant : à l'eau ! où ? -ici.»

je souhaiterai récupérer les seuls 'mots' de 3 lettres :
néo, mao, eau, ici

pour les transformer en :
_néo, _mao, _eau, _ici

et les réintégrer à leur place après avoir supprimé tous les caractères
non alphanumériques pour arriver à :
«façade _néo molière niño 495 naïve tschüß 806,19 _mao éléphant _eau
_ici»

pour l'instant, j'arrive à supprimer les caractères indésirables avec :
$etape = preg_replace('/[^\w\xc0-\xfd]+/', ' ', $depart);
qui me donne :
«façade néo molière d el niño ou 495 naïve tschüß 806 19 mao l éléphant
à l eau où ici »

pour le reste, je sèche :-(

merci pour les pistes.
--
@@@@@
E -00 comme on est very beaux dis !
' `) /
|\_ =="
P'tit Marcel
2007-03-10 10:47:54 UTC
Permalink
Post by denisb
je bute sur une regexp que je n'arrive pas à définir/mettre en oeuvre.
néo, mao, eau, ici
_néo, _mao, _eau, _ici
Tu dois pouvoir t'en sortir avec une assertion, genre :
$chaine_modifiee = preg_replace('`\b([^\d\W]{3})\b`', '_$1', $chaine)


eça
--
P'tit Marcel
stats sur les forums modérés http://www.centrale-lyon.org/ng/
denisb
2007-03-12 06:40:20 UTC
Permalink
Post by P'tit Marcel
Post by denisb
je bute sur une regexp que je n'arrive pas à définir/mettre en oeuvre.
néo, mao, eau, ici
_néo, _mao, _eau, _ici
$chaine_modifiee = preg_replace('`\b([^\d\W]{3})\b`', '_$1', $chaine)
merci de ta réponse.

malheureusement, ça ne fonctionne pas pour mon cas.
par exemple, transforme "façade " en "faç_ade "..

j'ai tourné, retourné, mouliné dans tous les sens pour en arriver
finalement...

...à résoudre mon problème différemment.

je cherche à bâtir un index pour une recherche fulltext dans mysql qui
'bypasserait' sa limite d'indexation aux mots de 4 lettres minimum (sans
toucher à la configuration de base : donc pour certains mots de 3
lettres seulement).

je ne sais si ça intéresse le forum, mais je peux mettre ma méthode à
disposition.
--
@@@@@
E -00 comme on est very beaux dis !
' `) /
|\_ =="
Olivier Miakinen
2007-03-12 08:54:58 UTC
Permalink
Post by denisb
Post by P'tit Marcel
$chaine_modifiee = preg_replace('`\b([^\d\W]{3})\b`', '_$1', $chaine)
malheureusement, ça ne fonctionne pas pour mon cas.
par exemple, transforme "façade " en "faç_ade "..
Parce que tu dois ajouter à la regexp la liste de toutes les lettres
avec diacritiques. La façon de le faire dépend à la fois de la table
de caractères utilisée (en particulier table 8 bits ou UTF-8) et de
l'ensemble des caractères qui t'intéressent.
Post by denisb
j'ai tourné, retourné, mouliné dans tous les sens pour en arriver
finalement...
...à résoudre mon problème différemment.
Ok.
Post by denisb
je ne sais si ça intéresse le forum, mais je peux mettre ma méthode à
disposition.
Je laisse la parole aux autres, personnellement je n'en ai pas besoin.
Continuer la lecture sur narkive:
Loading...