expression régulière: b vaut true au lieu de false - Java - Programmation
Marsh Posté le 31-08-2005 à 14:58:53
mon idée serait que ta regex est foireuse
tu l'as testée ? exhaustivement ? elle est censée faire quoi ? avec quelles String as tu testé ? avec quelle(s) String ca foire ?
Marsh Posté le 31-08-2005 à 15:04:12
souk a écrit : mon idée serait que ta regex est foireuse |
Quand je la colle dans Kodos, elle matche n'importe quoi (dans le sens qu'elle matche tout, si je lui file "mblskwdfngbsdlgkhndmlgbdfhbmdlhnbmdgbnsmbnsmgbngfjk" paf ça matche)
Marsh Posté le 31-08-2005 à 15:15:14
tu peux répondre à mes questions ?
et je sais pas ce qu'est kodos, ca m'avance pas des masses ...
Marsh Posté le 31-08-2005 à 15:17:03
souk a écrit : tu peux répondre à mes questions ? |
non
c'est pas moi l'auteur du topic, sakakaka
Citation : et je sais pas ce qu'est kodos, ca m'avance pas des masses ... |
Un debugger d'expressions rationnelles
Marsh Posté le 31-08-2005 à 15:22:10
ah ouais tiens
j'ai pas les yeux en face des trous mwé
enfin spa grave quoi, tu confirmes que la regexp est foireuse
Marsh Posté le 31-08-2005 à 15:24:21
Oui, je confirme même qu'elle est complètement moisie
Marsh Posté le 31-08-2005 à 15:33:51
un grand merci pr vos réponses. C'est donc à cause de cette put... de regex que ça rentre tjs ds la boucle car elle matche tout. Au moins je comprends pourquoi b valait tjs vrai.
Donc maintenant, si je peux me permettre de vous demander encore de m'aider, ce serait sympa. Je vous explique le pb en entier. Je préviens : ça va etre un peu long mais normalement c'est compréhensible (enfin, j'espère..)
J'ai un texte. Je le découpe phrase par phrase. Je recherche certains mots du texte qui sont encadrés par des balises ouvrantes #...# et fermantes ##...##. Les ... peuvent etre remplacés par 2 mots différents.
exemple de phrase:
Code :
|
Jusque là, je devais récupérer uniquement les segments de phrases qui commençaient par #mot1# et se finissaient par ##mot2## ou bien qui commençaient par #mot2# et se finissaient par ##mot1##.
ça fonctionnait. Je faisais comme ceci:
Code :
|
sauf que mon problème c'est que maintenant, je dois récupérer la phrase en entier. Quand dans la phrase il y a les balises, je récupère le mot entre ces balises, je l'encadre avec des vraies balises html et je le remets dans la phrase.
Au départ, j'avais fait comme le code juste après mais ça ne fonctionne pas vraiment car si dans une même phrase, j'ai plusieurs balises du meme type, je vais récupérer plusieurs fois la meme phrase mais pas avec les memes mots surlignés a chaque fois. Or moi, je veux les phrases en un seul exemplaire.
Code :
|
Je pense que si j'ai les phrases en double c'est car je fais les tests dans les 2 sens (soit mot1 puis mot2, soit mot2 puis mot1). Donc j'ai essayé de tout regrouper. Et c'est là que j'ai le problème du premier message.
Code :
|
Or quand la phrase est "cell signal" , b vaut true. Alors qu'il n'y a meme pas les balises avec les #. Donc je ne comprenais pas. ça vient donc de la regex mais sauriez vous comment faire pr résoudre le pb ?
J'espère que j'ai été claire. Merci
Marsh Posté le 31-08-2005 à 16:30:49
Je confirme le fait que la regex ne fonctionne pas car j'ai fait un test en prenant directement une phrase que j'ai moi meme écrite et non depuis le texte. Et là aussi, b vaut true alors qu'il ne devrait pas. Donc on rentre tjs ds la boucle donc j'ai tjs une null pointeur exception. Qu'est ce qui ne va pas dans mon expression régulière ?
Merci
Code :
|
Marsh Posté le 31-08-2005 à 17:08:09
Ce qui ne va pas, je sais pas, mais comment t'aider toi même ça je le sais: avec un débugger de regex.
Personnellement j'utilise Kodos, il est principalement orienté Python mais il permet de faire du debug sur tous les langages gérant les PRE (les REs Perl, par opposition aux regex POSIX)
Plus gros et plus complexe, RegexBuddy de chez Regular-Expressions.info (extrèmement bon site, par ailleurs, probablement le meilleur site sur les REs)
Marsh Posté le 31-08-2005 à 18:47:47
ok je te remercie. J'utiliserai ça la prochaine fois. Je ne connaissais pas.
J'ai fini (enfin!) par trouver l'erreur ds la regex: c'est le ou: j'ai mis 2 | et il en faut qu'un. Donc apparemment, ça doit considérer que j'ai mis un caractère vide dc n'importe quel caractère, c'est pour ça que ça rentre tjs ds la boucle.
Merci
a+
Marsh Posté le 31-08-2005 à 14:46:16
Bonjour,
J'ai un problème avec les expressions régulières. J'ai un match.find() qui vaut true alors qu'il est censé valoir false. Donc ça rentre ds ma boucle while, et qd je cherche un match.group() en particulier, j'ai une null pointeur exception.
L'expression régulière est de la forme suivante:
voilà, si vous avez une idée sur pourquoi b vaut true, ça m'intéresse.
Merci de votre aide.