Regex avec quantifieur sans séquence

cristoc Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   -  
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
je cherche la syntaxe pour une regex qui doit me chercher la présence de 3 fois le caractere - dans une chaine.
Je connais {3}, mais ça ne matche que pour 3 fois le caracteres de suite.
par exemple je veux reconnaitre 'mot-special-10-bis'
Merci de votre aide


2 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

Tes explications ne sont pas très claires...

par exemple je veux reconnaitre 'mot-special-10-bis'

Je suppose à la lecture de ton énnoncé et de l'exemple donné... que tu cherches les mots qui auraient 3 tirets dedans.. c'est bien ça ??

Dans ce cas, la regex pourrait être du genre
(\w+-\w+-\w+-\w+)

0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Bonjour,

J'essaierais quelque chose de ce genre :
/^([^-]*-){3}[^-]*$/

C'est-à-dire « n'importe quoi (sauf tiret) suivi d'un tiret, trois fois. Puis n'importe quoi (sauf tiret) pour finir. »
Cela matche pour EXACTEMENT trois tirets.
Si tu souhaites AU MOINS trois tirets, tu peux utiliser ça :
/(.*-){3}/


Xavier
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour
Tes regex ne sont pas bonnes.

Par exemple :
Dans la chaine :
xcdvgfdg mot-special-10-bis 76 dqsdfqsf

Avec ta première regex : Toute la ligne est selectionnée
Avec la seconde :
xcdvgfdg mot-special-10-
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Tu peux tester tes regex ici par exemple :
https://regex101.com/
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Oui c'est justement le site que j'ai utilisé pour les tester.
Pour moi elles répondent au cahier des charges, qui ne parle pas de mots mais de chaînes.
Après s'il doit y avoir des critères supplémentaires, on peut les adapter. J'ai choisi cette forme plutôt qu'une forme plus directe du genre .*-.*-.*-.*, sur laquelle j'étais parti au début, pour couvrir le cas où on souhaite 50 tirets... Ce qui n'est, je te l'accorde, pas au cahier des charges ;)
0
cristoc Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   1
 
Merci beaucoup à vous 2 , en effet ce sont bien des chaines sur lesquelles je teste la regex.
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
Au temps pour moi Jordane, je viens de comprendre ce que tu voulais dire : ma 2ème regex s'arrête juste après le tiret, en effet c'est un soucis.
/(.*-.*){3}/
est mieux.
0