J'ai une String du genre : nom1(val1) ou nom2(val1,val2)
par exemple cette string peut valoir :
- random(1.5)
- degree(5.8,5.1)
- ...
Il faut que je sépare cette string en 2 ou 3 string suivant les cas :
- string1 = random ; string2 = 1.5
- string1 = degree ; string2 = 5.8 ; string3 = 5.1
Je ne comprend pas pourquoi ce code ne marche pas :
// compilation de l'expression reguliere
Pattern pattern1 = Pattern.compile("/(\\w+)(\\((\\d+)(,(\\d+))?\\))?/");
// création d’un moteur de recherche
Matcher matcher1 = pattern1.matcher(s1);
System.out.println(s1); => degree(2,0)
System.out.println(matcher1.groupCount()); => 5
System.out.println(matcher1.group(0)); => java.lang.IllegalStateException: No match available
Il trouve bien le bon nombre groupe, mais des que j'accede au 1er groupe j'ai une erreur.
Merci d'avances pour vos réponses.
# start ?
Posté par Nahuel . Évalué à 1.
je suppose que pour l'utilisation tu dois faire un start(),
et tant que find() retourne vrai tu continue. fin() passerai a la prochaine chaine qui correspont qu'il trouve. et le start pour lui dire de commencer a traiter.
http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Matc(...)
non ?
# avant les regexps, comment faisait on ?
Posté par Mouns (site web personnel) . Évalué à 3.
donc la technique super secrete pour ne pas parser avec des regexps est :
- contains( CharSequence )
- charAt( int )
- indexOf( int, int )
- lastIndexOf( int, int )
- substring( int, int )
- length()
tu disposes aussi d'une classe pas mal utile java.util.StringTokenizer que tu peux dériver pour faire des tokenizer plus personnel :)
[^] # Re: avant les regexps, comment faisait on ?
Posté par Xavier FACQ . Évalué à 2.
Des fois on passe plus de temps à mettre au point des regexps que
de faire un petit peu de logique dans son programme ! Surtout avec des
syntaxes aussi simples... Je t'invite aussi à te tourner vers ses méthodes !
a+
Xavier
# Parsing
Posté par mrlem (site web personnel) . Évalué à 1.
Je ne sais pas à quel point ta syntaxe est complexe, mais si tu veux écrire un parser un tant soit peu lisible pour une grammaire conséquente, peut-être devrais-tu regarder du côté de générateurs de parsers. Celui qui me vient en tête en Java est ANTLR. Je l'avais utilisé il y a quelques années, et même si cela peut prendre un peu de temps à découvrir, le jeu en vaut largement la chandelle : ça évite de réinventer la roue (et les bugs qui vont avec).
http://www.antlr.org/doc/getting-started.html
# [Java] Extraire informations d'une String
Posté par fsoumil . Évalué à 2.
De plus, je pense que tu dois remplacer le premier ? par un +. Sinon, ton lexer ne parsera que des expressions de maximum 2 paramètres.
Voici l'expression que je te conseille:
J'espère que cela t'aide
# the pépé touch
Posté par pepeflingueur . Évalué à 1.
l'expression régulière à mon avis serait plutôt du style:
(\w+)\(((\d+(\.\d+)?)(,(\d+(\.\d+)?))?)\)
berk :)
si tu utilise cette expression tu vas te retrouver avec les groupes de capture suivants:
1 = random
2 = 1.5
3 = 1.5
4 = .5
5 =
6 =
7 =
1 = degree
2 = 5.8,5.1
3 = 5.8
4 = .8
5 = ,5.1
6 = 5.1
7 = .1
voilà, y'a plus qu'à récupérer ce qu'il te faut et l'utiliser comme tu veux :)
PS: un petit tool qui peut être utilie, pour tester les expressions régulières.
A+
[^] # Re: the pépé touch
Posté par pepeflingueur . Évalué à 1.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.