fonction équivalente au 'split' de perl? [pb regexp] - Java - Programmation
Marsh Posté le 30-04-2003 à 10:01:56
désolé, j'ai rien dit!!
j'ai fait un , mais j'avais pas vu la bonne fonction!!
c chouette, elle existe, et s'appelle "split", dans la classe java.util.regex.pattern!
merci tout seul!
Marsh Posté le 30-04-2003 à 10:06:37
Celle de la classe String doit être plus simple à utiliser.
Marsh Posté le 30-04-2003 à 10:23:26
ouapi, bon ben j'ai utilisé celle de la classe Sring (vu que c'en est un)!
ça m'apprendra à mieux lire avant de poster!!
Marsh Posté le 30-04-2003 à 11:49:08
comprends pas un truc : le pattern, on le défini comment??
si je mets Pattern.compile("aa*\d+\w?" )
il croit que * c vraiment le caractère *, \n il comprends pas, etc...
comment qu'on fait hein???
Marsh Posté le 30-04-2003 à 11:51:57
arghbis a écrit : comprends pas un truc : le pattern, on le défini comment?? |
C une chaine de caractères ton pattern, et on fait quoi dans les chaines de caractères en Java, pour mettre de anti-slash ? On les double...
Pattern.compile("aa*\\d+\\w?" )
Marsh Posté le 30-04-2003 à 12:43:08
ouai, mais alors là, c qd même bizarre! comment fait-il pour faire la diférence entre "je cherche la chaine \n" et "je cherche un retour charriot"??
Marsh Posté le 30-04-2003 à 13:05:27
arghbis a écrit : ouai, mais alors là, c qd même bizarre! comment fait-il pour faire la diférence entre "je cherche la chaine \n" et "je cherche un retour charriot"?? |
Passke "la chaîne \n" c'est "\\n" et "retour chariot" c'est "\n"
Marsh Posté le 30-04-2003 à 14:39:36
bon ben comprends pas!
pourquoi il accepte pas ça :
Code :
|
il me dit :
Invalid character in escape sequence.
(property 0 string "viewLabel" String pat = "(property 0 string \"viewLabel\"\s*\n(default \"\" \"\" )";
j'en rajoute une couche : les parenthèses que l'on utilise dans les regexp pour récupérer les match String, comment fait il la différence avec des parenthèses en tant que caractère?
Ps: je remarque un truc : la doc java est pas mal, il y a des exemples, mais la plupart du temps ils sont triviaux!
Marsh Posté le 30-04-2003 à 14:42:13
arghbis a écrit : bon ben comprends pas!
|
s c'est un caractère d'échappement ? '\s' ça existe !? j'crois pas moi !
Marsh Posté le 30-04-2003 à 14:44:42
ben moi je crois bien!
Predefined character classes
. Any character (may or may not match line terminators)
\d A digit: [0-9]
\D A non-digit: [^0-9]
\s A whitespace character: [ \t\n\x0B\f\r]
\S A non-whitespace character: [^\s]
\w A word character: [a-zA-Z_0-9]
\W A non-word character: [^\w]
cf
Marsh Posté le 30-04-2003 à 14:46:03
arghbis a écrit : ben moi je crois bien! |
Non. Il faut faire la différence entre caractère d'échappement à l'intérieur d'une String Java et caractère d'échappement à l'intérieur d'une regexp. Ici, tu vas devoir écrire \\s
Marsh Posté le 30-04-2003 à 14:48:26
ben oui mais non!
Code :
|
marche pas non plus!
en plus, je trouve que des exemples simples sur le net!!
personne utilise les regexp en java avec ce genre de choses?? j'y crois pas qd même!
Marsh Posté le 30-04-2003 à 14:49:03
arghbis a écrit : ben moi je crois bien! |
Mais tu confonds les patterns et les séquences d'échappement.
Essaye de faire ça :
Code :
|
Tu comprendra peut être mieux...
Marsh Posté le 30-04-2003 à 15:02:45
t'inquiètes pas, je comprends bien les échappements et patterns, c pas ça mon prob! mon prob est qu'il y a une ambiguité :
si tu recherche un parenthèse dans une chaine, et que tu veux capturer ce qu'il y a dedans, genre "(chaine)' et je veux récupérer (chaine), je fais koi comme pattern??
\\((chaine)\\) ou ((chaine)) ??
et enfin dernier emmerdement en date, la fonction split (String regex) de la classe String, ben elle veut rien savoir! y me dit qu'il la trouve pas cet andouille de compilateur! (ennervement inside, désolé!)
mais je vous remercie tous de votre aide!
Marsh Posté le 30-04-2003 à 15:08:01
arghbis a écrit : t'inquiètes pas, je comprends bien les échappements et patterns, c pas ça mon prob! mon prob est qu'il y a une ambiguité : |
Méthode simple : écris ta regexp sur papier telle qu'elle devrait être. Ensuite, double tous les \ qui pourraient être présents.
Exemple :
Je veux trouver tous les mots encadrés par (ça devrait donner une image qui s'affiche pas, là, because forum de Joce
La regexp correspondante sera \
Donc dans une String, on aura : String pattern = "\\";
Voilou.
arghbis a écrit : |
Balance l'erreur du compilo.
Marsh Posté le 30-04-2003 à 15:14:54
bon ben là il a pu l'air de gueuler contre split, mais contre autre chose!
bon ben je cherche! donc pour le coup de () ça serait (\\(chaine\\)) ??
je trouve ça vraiment compliqué les regexp en java, qd c si simple dans d'autres langages (perl par exemple!)
Marsh Posté le 30-04-2003 à 15:16:31
arghbis a écrit : bon ben là il a pu l'air de gueuler contre split, mais contre autre chose! |
C surement quasiment aussi simple. Y a juste à doubler les \ qui doivent apparaitre dans le pattern.
Marsh Posté le 30-04-2003 à 15:30:16
El_gringo a écrit : |
+1
En fait, ça vient du fait que ta regexp en Perl sera pas contenue dans une chaîne encadrée par des guillemets, contrairement à Java.
Donc faut faire un peu plus gaffe quand tu construis ta regexp puis que tu l'"exportes" en Java
Marsh Posté le 30-04-2003 à 15:35:41
bon ben alors je retire un tit peu de ce que j'ai dit (mais pas tout qd même! )
le principal problème que j'avais (outre ces **** de \) , c ke le compilo trouvait pas la moitié des fonctions regexp!
la raison : j'ai installé gcj paske je doit compiler du code natif pour un autre truc, et ce con m'a remplacé le javac du sdk par le sien, qui ne trouve pas la moitié des fonctions java!
bon ben je crois que ça va aller maintenant!!
Marsh Posté le 30-04-2003 à 17:55:52
recoucou!! c moi que revoilou!
bon ben il en veut pas de mes parenthèses!
que je mettes ou non un \\ , il pense que ce sont des parenthèses de regroupement!!
comment faire? utiliser le code ascii?? je le connais pas moi...
help please!
Marsh Posté le 30-04-2003 à 18:17:43
crée ta regexp en dhors de java et teste-la
une fois qu'elle répond à tes besoins, transforme-la pour qu'elle rentre dans un String java.
mais c'est vrai que parfois ça te file une regexp de pendu pour rien
Marsh Posté le 30-04-2003 à 09:53:24
Salut tout le monde!
j'aurais voulu savoir si en java, il existe une fonction équivalente au split de Perl (qui je le rapelle, permet de couper une chaine de charactère selon un motif et récupère le résultat dans un tableau).
ceci, parceque je dois ajouter des données au milieu d'un fichier qui a une structure bien définie. J'ai regardé du côté des regexp java, mais je vois pas de moyen aussi simple que split.
une idée??
Message édité par arghbis le 30-04-2003 à 14:40:03