IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Regex format matrice


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 18
    Points : 18
    Points
    18
    Par défaut Regex format matrice
    Bonjour à tous !
    Voilà je développe une appli en java pour pouvoir calculer des matrices et j'utilise des regex pour vérifier le format de la matrice saisie.
    Donc le format est le même que celui de scilab ou matlab à savoir :

    [ 1 , 2 ; 3 , 4 ]
    va donner à l'exécution
    [
         1    2
         3    4
    ]
    Donc cela va donner une matrice de dimension 2,2
    J'espère que vous avez compris mon problème. Au niveau de ma regex, je ne suis pas très loin du but.

    String reg = "\\s*" // un nombre quelconque d'espaces en tous genres
    	+ "\\[[" // On veut un crochet  
    	+ "\\s*" // puis un nombre quelconque d'espaces en tous genres 
    	+ "0-9]+" // Au moins un chiffre
    	+ "\\s*" // puis un nombre quelconque d'espaces en tous genres
    	+ "((,*?\\s*[0-9])*" //Suivi d'une virgule pour séparer les colonnes 
    	+ "\\s*" // puis un nombre quelconque d'espaces en tous genres
    	+ "(;*?\\s*[0-9])*)*" // Suivi de point virgule pour séparer les lignes
    	+ "\\s*" // puis un nombre quelconque d'espaces en tous genres
    	+ "]" //En terminant par un crochet fermant pour la matrice
    	+ "\\s*$" // puis un nombre quelconque d'espaces en tous genres
    ;
    Mon problème est que si l'utilisateur saisit par exemple : [ 1 , 2 ; 3 ] alors cela ne dérange pas ma regex hors ça le devrait !!
    Donc ma question est : comment faire pour reprendre le motif juste avant le point-virgule et dire qu'il faut le respecter?

    je bloque à ce niveau là alors merci de votre aide et de votre compréhension

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu as des trucs bizarre qui ne correspondent pas à ce que tu dis, comme des crochets à des endroits inattendus, ou des étoiles qui rendent optionnel l'élément qui les précèdent, alors que ce ne devrait pas être le cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    String reg = "\\s*" // un nombre quelconque d'espaces en tous genres
    	+ "\\[[" // On veut un crochet  
    	+ "\\s*" // puis un nombre quelconque d'espaces en tous genres 
    	+ "0-9]+" // Au moins un chiffre
    	+ "\\s*" // puis un nombre quelconque d'espaces en tous genres
    	+ "((,*?\\s*[0-9])*" //Suivi d'une virgule pour séparer les colonnes 
    	+ "\\s*" // puis un nombre quelconque d'espaces en tous genres
    	+ "(;*?\\s*[0-9])*)*" // Suivi de point virgule pour séparer les lignes
    	+ "\\s*" // puis un nombre quelconque d'espaces en tous genres
    	+ "]" //En terminant par un crochet fermant pour la matrice
    	+ "\\s*$" // puis un nombre quelconque d'espaces en tous genres
    ;


    C'est bien de découper et de commenter ta regexp, mais n'hésite pas à définir des constantes c'est tout aussi lisible.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    final String SPACE = "\\s*";
    final String NUMBER = "[0-9]+";
     
    String reg = SPACE
    	+ "\\["
    	+ SPACE + NUMBER + SPACE
    	+ ","
    	+ SPACE + NUMBER + SPACE 
    	+ ";"
    	+ SPACE + NUMBER + SPACE
    	+ ","
    	+ SPACE + NUMBER + SPACE
    	+ "\\]"
    	+ SPACE;

    a++

  3. #3
    Membre confirmé
    Avatar de Laine
    Femme Profil pro
    Doctorat informatique
    Inscrit en
    Mars 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorat informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 238
    Points : 646
    Points
    646
    Par défaut
    Bonsoir,
    Pendant que je testais ma regex pour te la posté, adiGuba t'avais déja répondu et avec la bonne réponse.

    Cependant, je ne sais pas si tu veux une matrice avec seulement deux ligne ou plusieurs lignes ? Ou je n'ai rien compris ?
    Au cas ou je te poste la regex, elle te permet d'avoir une matrice n-lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String reg = "\\[[0-9]+,[0-9]+(;[0-9]+,[0-9]+)*]$";
    J'ai enlevé les espaces pour que la regex soit plus lisible.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 18
    Points : 18
    Points
    18
    Par défaut Re
    Tout d'abord, merci pour vos réponses
    les deux regex marchent mais en fait, je pense qu'il faudrait que je modifie mon algo et que j'utilise plusieurs regex car pour celle de adiGuba, la regex ne permet uniquement de créer une matrice 2,2...
    La regex de Laine me permet de créer une matrice à n lignes mais seulement à deux colonnes...
    Et moi je veux une regex qui me permet de créer une matrice à n lignes et m colonnes donc je pense que je devrais faire plusieurs regex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    regex1 = "\\[[0-9]+]";
    regex2 = "\\[[0-9]+,[0-9]+(;[0-9]+,[0-9]+)*]$"; // regex à n lignes et d'autres regex pour n colonnes ensuite
     
    if (maChaine.matches(regex1)){ //traitement}
     
    else if (maChaine.matches(regex2)){ //traitement}
     
    else if (maChaine.matches(regex3)){ //traitement}
    etc...
    Merci de m'avoir mis sur cette piste...
    je vous tiens au courant quand j'aurais terminé...
    Slt !!

  5. #5
    Membre confirmé
    Avatar de Laine
    Femme Profil pro
    Doctorat informatique
    Inscrit en
    Mars 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorat informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 238
    Points : 646
    Points
    646
    Par défaut
    Bonjour
    Oui j'ai supposé une matrice deux colonnes, je n'sais pourquoi
    Si tu en a besoin, voici la regex pour une matrice n lignes et m colonnes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String regMCol= "[0-9]+(,[0-9]+)*";
    String reg = "\\["+regMCol+"(;"+regMCol+")*]$";
    salut.

Discussions similaires

  1. [RegEx] Regex format date
    Par daydream123 dans le forum Langage
    Réponses: 4
    Dernier message: 22/06/2015, 15h03
  2. [RegEx] Regex format [A-Z]*/.*
    Par Babas007 dans le forum Langage
    Réponses: 10
    Dernier message: 29/09/2013, 13h32
  3. Matlab enregistrement matrice au format image
    Par janvier.janvier dans le forum Images
    Réponses: 5
    Dernier message: 06/01/2009, 19h58
  4. Enregistrement matrice image au format texte
    Par nourch dans le forum Images
    Réponses: 12
    Dernier message: 22/07/2008, 08h59
  5. Réponses: 12
    Dernier message: 30/12/2007, 18h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo