Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[HC] Expression reguliere

26 réponses
Avatar
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.

10 réponses

1 2 3
Avatar
Grasshoper
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) ?
Avatar
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

.. je creuse
Avatar
Grasshoper
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é.
Avatar
Sam Vimaire
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 .
Avatar
joaquim
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.
Avatar
Mickaël Wolff
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
Avatar
pjb
Sam Vimaire writes:

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__
Avatar
Olivier Miakinen
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.
Avatar
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...
Avatar
pjb
Olivier Miakinen <om+ writes:

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__
1 2 3