[Regex] reconnaitre une chaine non complète

Edobvdcorp Messages postés 8 Date d'inscription jeudi 8 juillet 2004 Statut Membre Dernière intervention 9 juillet 2004 - 8 juil. 2004 à 11:53
kkhaled Messages postés 1 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 7 septembre 2005 - 7 sept. 2005 à 11:44
Bonjour !

comment puis je faire pour reconnaître une chaine incomplète avec une expression régulière en java ?

par chaine incomplète, j'entend par exemple :

str = "aaa"
regex = "a*b"

j'aimerai un genre de str.prefixmatches(regex) qui renverai vrai - la chaine correspond bien au début de la regex. (pour cet exemple, str.matches(regex) renvoie faux )
En fait, il me faut savoir si une chaine en cours de construction respecte une expression régulière ou pas.

merci bcp !

15 réponses

wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
8 juil. 2004 à 13:54
comprend pas tres bien ce que tu recherches

met ton regex à "a*b?"
0
Edobvdcorp Messages postés 8 Date d'inscription jeudi 8 juillet 2004 Statut Membre Dernière intervention 9 juillet 2004
8 juil. 2004 à 14:45
si je met mon regex à "a*b?"

alors *au final*, la chaine "aaaa" sera acceptée alors que ce n'est pas ce que je veux.

en fait, j'ai une liste de plusieurs regex, avec un ordre de priorité. Ce que j'aimerai, c'est qu'au cours de ma construction de chaine (str pour les intimes), je puisse éliminer au fur et à mesure les expressions qui ne correspondront jamais à ce que je suis en train de construire

détails des opérations :
---------------------------------

regex1 = 'f*g'
regex2 = 'a*b'
regex3= 'a*c'

- 1er tour de boucle :
str = 'a'
ce que je veux c'est être capable de savoir , c'est que regex1 n'acceptera pas str
en revanche, regex2 acceptera

-2ième tour :
str = 'aa'
on a déjà éliminer regex1, il reste 2 et 3 (pour l'instant on ne regarde que 2)

-3ième tour :
str='aac'
là c facile : un simple matches suffirait

voila, est ce plus clair ???

merci !
0
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
8 juil. 2004 à 15:16
reg="A{1,2}?B?"
0
Edobvdcorp Messages postés 8 Date d'inscription jeudi 8 juillet 2004 Statut Membre Dernière intervention 9 juillet 2004
8 juil. 2004 à 15:25
- reg="A{1,2}?B?"

non çà ne fonctionne pas avec une expression du genre :
regex = ":[a-z]+:"

je veux pouvoir savoir que si str ne commence pas par ':', alors c'est faux.

ex :
-----
1er tour : str = ":" ok
2: str = ":a" ok
3: str = ":a0" pas ok on passe a la regex suivante

ps: désolé pour la coquille, il fallait lire :
"ce que je veux c'est être capable de savoir que regex1 n'acceptera pas str"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
8 juil. 2004 à 15:38
la tu fait un indexOf alors
0
Edobvdcorp Messages postés 8 Date d'inscription jeudi 8 juillet 2004 Statut Membre Dernière intervention 9 juillet 2004
8 juil. 2004 à 15:55
indexOf ne prend pas d'expression régulière en paramètre

str = ":098786"
regex = ":[0-9]+:"

str.indexOf(regex) renvera une erreur. je me trompe ??
0
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
8 juil. 2004 à 16:23
si je comprend bien, les expressions reguliere ne te seront d'aucun secourt puisque tu veut construire point par point ta methode de recherche (c'est justement pour eviter cela que les expressions reguliéres ont été crée si je ne me trompe) . bref autant faire un bon vieux switch
0
Edobvdcorp Messages postés 8 Date d'inscription jeudi 8 juillet 2004 Statut Membre Dernière intervention 9 juillet 2004
8 juil. 2004 à 16:37
c'est ce que je fais déjà en fait, un genre de machine à état mais c super lourd à débugger et fo en faire une pour chaque expression régulière

j'aimerai juste pouvoir savoir si une chaine est ou n'est pas un préfixe d'une chaine reconnue par une expression régulière... çà doit bien être possible qd même ??? !! ?? :-D

wargre : j'te remercie de me faire la discution, au moins j'ai l'impression d'avancer :D
0
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
9 juil. 2004 à 10:04
mais la j'arrive pas a voir exactement ce que tu cherches.

tu peux faire "([a-z]*)expressionReg$"
alors il te renvera le prefixe de l'expression reguliere
0
Edobvdcorp Messages postés 8 Date d'inscription jeudi 8 juillet 2004 Statut Membre Dernière intervention 9 juillet 2004
9 juil. 2004 à 12:23
ce n'est effectivement pas facile à formuler, j'essayes d'une autre manière :

Est ce qu'il y a moyen de savoir jusqu'où est allé la méthode String.matches() avant de renvoyer 'faux' ?
0
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
9 juil. 2004 à 14:29
les parenteses capturante! (ouf)
mais la il faut que t'utilise le Pattern de java.util.regex

tu fais "^prefixe([a-z]*)$" et en sortie t'as
-> true => prefixe trouvé
|-> renvoie une chaine vide, il n'y a que le prefixe
|-> renvoie une chaine avec le texte apres le prefixe.
-> false => prefixe non trouvé
0
Edobvdcorp Messages postés 8 Date d'inscription jeudi 8 juillet 2004 Statut Membre Dernière intervention 9 juillet 2004
9 juil. 2004 à 14:57
je crois que je vois ce que tu veux dire, mais la question c'est comment alors avoir le préfixe à insérer dans l'expression régulière du pattern ?

j'en ai discuter aussi ici - d'autres visions - tjs pas de solution :
http://www.developpez.net/forums/viewtopic.php?t=220693

encore merci :D
0
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
9 juil. 2004 à 15:38
mouais mouais t'as 5 choix, il faut les tester les 5 y'a pas....
0
Edobvdcorp Messages postés 8 Date d'inscription jeudi 8 juillet 2004 Statut Membre Dernière intervention 9 juillet 2004
9 juil. 2004 à 16:11
en fait il y a bien plus que 5 choix (parce que là c juste les listes), c'est pour çà que c'était intéressant de généraliser pour pouvoir après rajouter à la volée facillement
0
kkhaled Messages postés 1 Date d'inscription mercredi 19 février 2003 Statut Membre Dernière intervention 7 septembre 2005
7 sept. 2005 à 11:44
khaled
0
Rejoignez-nous