Bonjour,
Juste une petite question sur les regex que je me pose...
Supposons le string en input:
Number1 is 123.456.789 Number2 is 13.416.789
Number3 is 8.179 Number4 is 189
Number5 is 3.756.759
Et la regex
String NUMBER_REGEX = "(([0-9]{1,3}\\.)*[0-9]+)";
Quand on cherche à matcher la regex, je me demande comment vont fonctionner les classes java.
Ce que je veux dire c'est que pour le premier match d'un nombre 123.456.789 je vois plusieurs matchs possible:
- ([0-9]{1,3}\\.) 2 fois puis 3 fois [0-9]+ -> 123.456.789
- ([0-9]{1,3}\\.) 2 fois puis 2 fois [0-9]+ -> 123.456.78
- ([0-9]{1,3}\\.) 2 fois puis 1 fois [0-9]+ -> 123.456.7
- ([0-9]{1,3}\\.) 1 fois puis 3 fois [0-9]+ -> 123.456
- ([0-9]{1,3}\\.) 1 fois puis 2 fois [0-9]+ -> 123.45
- ([0-9]{1,3}\\.) 1 fois puis 1 fois [0-9]+ -> 123.4
- ([0-9]{1,3}\\.) 0 fois puis 3 fois [0-9]+ -> 123
- ([0-9]{1,3}\\.) 0 fois puis 2 fois [0-9]+ -> 12
- ([0-9]{1,3}\\.) 0 fois puis 1 fois [0-9]+ -> 1
...
Bref je raconte surement des bêtises mais j'ai du mal à comprendre comment le matcher va fonctionner. Y a-t-il des regles?
Du genre:
- Est-ce que le match va essayé de constituer la plus grande chaine de caractère trouvée qui match l'expression?
- Est-ce qu'il va renvoyer le premier match trouvé, sachant qu'il prend les expressions dans l'ordre (cad qu'il essaie de matcher ([0-9]{1,3}\\.) tant qu'il en trouve, puis ensuite passe au [0-9]+?)
Bref la regex que j'ai utilisé arrive a me donner le résultat que je cherche (a savoir le nombre complet 123.456.789), cependant je préfère assurer mes arrières histoire de ne pas avoir de mauvaise surprise...
Je suis loin d'être un pro des regex, ca vous semble être la bonne regex pour matcher un nombre de ce type?
Partager