[HC] Expression reguliere

Le
Sam Vimaire
Hello.

Je ne parviens pas à trouver le groupe le plus approprié pour poser ma
question. Désole pour le Hors-Charte, peut-etre quelqu'un saura t'il me
rediriger (voir me répondre).

Expression réguliere:
Il ya a t'il une syntaxe pour "tout sauf"

Quelle serait par exemple l'expression réguliere pour rechercher dans
la liste suivante les chaines avec un autre caractère que B à la
seconde place (tout sauf B)
AED
BBC
ZRE

resultat souhaité : 1ere occurrence AED, 2eme occurence ZRE

Merci pour vos réponses.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Grasshoper
Le #16455151
Salut,

01/08/2008 11:19 - Sam Vimaire :
Je ne parviens pas à trouver le groupe le plus approprié pour poser ma
question. Désole pour le Hors-Charte, peut-etre quelqu'un saura t'il me
rediriger (voir me répondre).



Je ne sais pas.

Expression réguliere:
Il ya a t'il une syntaxe pour "tout sauf"

Quelle serait par exemple l'expression réguliere pour rechercher dans
la liste suivante les chaines avec un autre caractère que B à la
seconde place (tout sauf B)
AED
BBC
ZRE

resultat souhaité : 1ere occurrence AED, 2eme occurence ZRE



Ce ne serait pas simplement : .[^B].* (en omettant les problèmes de casse) ?
Sam Vimaire
Le #16455141
Dans son message précédent, Grasshoper a écrit :
AED
BBC
ZRE


Ce ne serait pas simplement : .[^B].* (en omettant les problèmes de casse) ?




Hum.. si c'est le cas il doit y avoir des subtilité.
car avec cette expression j'ai.
AED
BC
ZRE

.. je creuse
Grasshoper
Le #16455331
01/08/2008 11:34 - Sam Vimaire :
Dans son message précédent, Grasshoper a écrit :
AED
BBC
ZRE


Ce ne serait pas simplement : .[^B].* (en omettant les problèmes de casse) ?



Hum.. si c'est le cas il doit y avoir des subtilité.
car avec cette expression j'ai.
AED
BC
ZRE



À mon humble avis, .[^B].* est l'expression régulière qui correspond à
ta requête. Mais une expression régulière ne fait rien en soi ; tu dois
avoir un outil pour traiter tes chaînes, et en faire ce que tu veux. Je
pense que tu devrais orienter ta question sur l'outil que tu utilises et
chercher un endroit approprié.
Sam Vimaire
Le #16455321
Dans son message précédent, Grasshoper a écrit :
À mon humble avis, .[^B].* est l'expression régulière qui correspond à
ta requête. Mais une expression régulière ne fait rien en soi ; tu dois
avoir un outil pour traiter tes chaînes, et en faire ce que tu veux. Je
pense que tu devrais orienter ta question sur l'outil que tu utilises et
chercher un endroit approprié.



Pa ni Problem
Pour info : j'utilise The Regex Coach pour tester le resultat.
Merci .
joaquim
Le #16456091
Sam Vimaire wrote:
Hello.

Je ne parviens pas à trouver le groupe le plus approprié pour poser ma
question. Désole pour le Hors-Charte, peut-etre quelqu'un saura t'il me
rediriger (voir me répondre).

Expression réguliere:
Il ya a t'il une syntaxe pour "tout sauf"

Quelle serait par exemple l'expression réguliere pour rechercher dans
la liste suivante les chaines avec un autre caractère que B à la
seconde place (tout sauf B)
AED
BBC
ZRE

resultat souhaité : 1ere occurrence AED, 2eme occurence ZRE

Merci pour vos réponses.





Le site des expressions régulières:

http://www.regular-expressions.info

Cdt
J.
Mickaël Wolff
Le #16456081
Sam Vimaire a écrit :

Hum.. si c'est le cas il doit y avoir des subtilité.
car avec cette expression j'ai.
AED
BC
ZRE



C'est logique, la chaîne BC est une chaîne dont le second caractère
n'est pas B ;)

.. je creuse



Dépêches-toi ! Les JO commencent bientôt ! (ben quoi, si déjà on est
hors-charte).

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
pjb
Le #16456701
Sam Vimaire
Hello.

Je ne parviens pas à trouver le groupe le plus approprié pour poser ma
question. Désole pour le Hors-Charte, peut-etre quelqu'un saura t'il
me rediriger (voir me répondre).

Expression réguliere:
Il ya a t'il une syntaxe pour "tout sauf"

Quelle serait par exemple l'expression réguliere pour rechercher dans
la liste suivante les chaines avec un autre caractère que B à la
seconde place (tout sauf B)
AED
BBC
ZRE

resultat souhaité : 1ere occurrence AED, 2eme occurence ZRE



man 7 regex
(info "(emacs)Regexps")


^.[^B].$


Cependant, [^...] ne matche qu'un seul caractère, différent des
caractères listés dans les crochets.

Si on veut dire tout sauf telle ou telle sequence de caractère, il n'y
a pas d'opérateur d'expression regulière pour le faire, (pas de
"complément" d'expression régulière), mais on peut cependant encore
exprimer ceci avec une expression régulière. Le seul problème, c'est
que l'expression obtenue est assez complexe:

;; Tout sauf Microsoft (juste un exemple)
(princ (pjb-regexp-not-string "Microsoft"))

^[^Mcfiorst]*([^M]*|M([^i]*|i([^c]*|c([^r]*|r([^o]*|o([^s]*|s([^o]*|o([^f]*|f[^t]))))))))[^Mcfiorst]*$

est une expression régulière qui reconnait toute chaine ne contenant
pas la sous-chaine "Microsoft".


grep -v fonctionne autrement bien sur. On inverse le test final au
lieu d'inverser l'expression régulière elle même.

--
__Pascal Bourguignon__
Olivier Miakinen
Le #16457351
Le 01/08/2008 14:52, Pascal J. Bourguignon a écrit :

^.[^B].$



Oui.

Cependant, [^...] ne matche qu'un seul caractère, différent des
caractères listés dans les crochets.



En effet. Ça semble d'ailleurs être l'erreur la plus fréquente chez
ceux qui tentent d'utiliser les expressions régulières sans trop les
maîtriser, alors je le répète :

La syntaxe [...] matche *toujours* *exactement* un caractère,
ni plus, ni moins.

Si on veut dire tout sauf telle ou telle sequence de caractère, il n'y
a pas d'opérateur d'expression regulière pour le faire, (pas de
"complément" d'expression régulière), mais on peut cependant encore
exprimer ceci avec une expression régulière. Le seul problème, c'est
que l'expression obtenue est assez complexe:

;; Tout sauf Microsoft (juste un exemple)
(princ (pjb-regexp-not-string "Microsoft"))

^[^Mcfiorst]*([^M]*|M([^i]*|i([^c]*|c([^r]*|r([^o]*|o([^s]*|s([^o]*|o([^f]*|f[^t]))))))))[^Mcfiorst]*$

est une expression régulière qui reconnait toute chaine ne contenant
pas la sous-chaine "Microsoft".



Avec les assertions des expressions régulières Perl ou PCRE, il y a
quand même plus lisible :
^((?!Microsoft).)*$

Je ne sais pas dire en revanche lequel des deux est le plus efficace.
Olivier Miakinen
Le #16457571
Le 01/08/2008 14:52, Pascal J. Bourguignon a écrit :

^[^Mcfiorst]*([^M]*|M([^i]*|i([^c]*|c([^r]*|r([^o]*|o([^s]*|s([^o]*|o([^f]*|f[^t]))))))))[^Mcfiorst]*$

est une expression régulière qui reconnait toute chaine ne contenant
pas la sous-chaine "Microsoft".



Tu en es sûr ? Teste-la donc avec une chaîne se terminant par
« Microsof » pour voir...
pjb
Le #16457831
Olivier Miakinen
Le 01/08/2008 14:52, Pascal J. Bourguignon a écrit :

^[^Mcfiorst]*([^M]*|M([^i]*|i([^c]*|c([^r]*|r([^o]*|o([^s]*|s([^o]*|o([^f]*|f[^t]))))))))[^Mcfiorst]*$

est une expression régulière qui reconnait toute chaine ne contenant
pas la sous-chaine "Microsoft".



Tu en es sûr ? Teste-la donc avec une chaîne se terminant par
« Microsof » pour voir...



Bien vu. Merci pour ce rapport de bogue!
Il faut ajouter une * (un ? irait aussi) pour que ça marche bien:

^[^Mcfiorst]*([^M]*|M([^i]*|i([^c]*|c([^r]*|r([^o]*|o([^s]*|s([^o]*|o([^f]*|f[^t]*))))))))[^Mcfiorst]*$

--
__Pascal Bourguignon__
Publicité
Poster une réponse
Anonyme