problème expression regulière

problème expression regulière - Java - Programmation

Marsh Posté le 30-05-2005 à 12:09:21    

Bonjour,
 
j'aimerais verifier si un argument est bien de la forme d'un nom de fichier suivi de l'extension rng.
 
J'ai donc fait cela:
 
 if (args[0].matches("[^-][^.]+\.rng" )) {
     System.out.println("good" );
 }
 else
     {
  System.out.println("mauvais" );
     }
 
Comme ca, je lui dis que mon motif, c'est quelque chose, dont le 1er caractère ne commence pas par un "-", qui contient n'importe quel caractère répété au moins une fois, sauf un point puis suivi de .rng, qui est l'extension.
 
Mais en compilant, j'ai ce message d'erreur:
 
thierry@thierry:~/Master/Dong/Gestion_Option$ javac Boubou.java
Boubou.java:4: illegal escape character
        if (args[0].matches("[^-][^.]+\.rng" )) {
                                       ^
1 error
 
Merci
A+
 

Reply

Marsh Posté le 30-05-2005 à 12:09:21   

Reply

Marsh Posté le 30-05-2005 à 14:07:11    

normal .. Il faut echaper le -
[^\-]
 
Mais je suis pas sûr que ton expression verifie bien ce que tu souhaites...
Tu devrais plutôt faire un truc genre :

Code :
  1. ^[^\-](\w)+\.rng$

Reply

Marsh Posté le 30-05-2005 à 14:47:31    

Je testerai :-)
 
Merci
A+

Reply

Marsh Posté le 30-05-2005 à 14:50:28    

Euh, ca marche pas :-(
 
thierry@thierry:~/Master/Dong/Gestion_Option$ javac *.java
Gestion_Option.java:81: illegal escape character
        if (!(args[n-1].matches("^[^\-](\w)+\.rng$" ))) {
                                     ^
Gestion_Option.java:81: illegal escape character
        if (!(args[n-1].matches("^[^\-](\w)+\.rng$" ))) {
                                         ^
Gestion_Option.java:81: illegal escape character
        if (!(args[n-1].matches("^[^\-](\w)+\.rng$" ))) {
 
Merci
A+

Reply

Marsh Posté le 30-05-2005 à 17:02:12    

Bonjour,
 
Je suis loin d'être spécialiste des expressions régulières, mais j'aurais tendance à faire la proposition suivante.
Si la commande est la suivante :
* 1er caractère différent de "-" : [^-]
* suivi de 1, ... caractère(s) différent(s) de "." : [^\\.]+
* suivi de ".rng" : \\.rng
 
Exemple :

Code :
  1. import java.util.regex.*;
  2. public class Regexp {
  3.    
  4.     Pattern p = Pattern.compile("[^-][^\\.]+\\.rng" );
  5.      
  6.     public void verifyRegexp(String fileName) {
  7.         Matcher m = p.matcher(fileName);
  8.         System.out.println(fileName+" -> "+m.matches());
  9.     }
  10.      
  11.     public static void main(String[] args) {
  12.         Regexp r = new Regexp();
  13.         r.verifyRegexp("a.rng" );
  14.         r.verifyRegexp("ab.rng" );
  15.         r.verifyRegexp("-a.rng" );
  16.         r.verifyRegexp("a-.b.rng" );
  17.         r.verifyRegexp("a-b-c.rng" );
  18.         r.verifyRegexp("abc.vb" );
  19.     } 
  20. }


Sortie :

a.rng -> false
ab.rng -> true
-a.rng -> false
a-.b.rng -> false
a-b-c.rng -> true
abc.vb -> false


Nicolas


Message édité par Nicolas_75 le 30-05-2005 à 17:05:44
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed