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

Java Discussion :

Expressions Régulières, caractères spéciaux { ( | etc.


Sujet :

Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Expressions Régulières, caractères spéciaux { ( | etc.
    Salut,

    Comment faire pour matcher un string dans un fichier en utilisant les expressions régulières?

    Mon fichier est de la forme:

    $$ 1 "string"
    $$ 2 "string"
    $$ 3 "string"

    Actuellement, je fais ça: "\\$\\$ (\\w+) \"(\\w+)\""

    Mais ça match pas quand il y a des caractères un peu spéciaux autres que les a-z A-Z 0-9 genre '{' ou '(' dans le string.

    $$ 1 "{1}"
    $$ 2 "("

    Tous ça (et tous les autres charactères pas pris en compte dans mon regex) sont pas matchés.

    Voilà un programme de test rapide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
     
    public class RegexTest {
     
        public static void main(String[] args) {
    	String nodeLabelRegex = "\\$\\$ (\\w+) \"(\\w+)\"";
    	Pattern nodeLabelPattern = Pattern.compile(nodeLabelRegex);
    	Matcher nodeLabelMatcher = nodeLabelPattern.matcher("$$ 1 \"abcd\"");
    	while (nodeLabelMatcher.find()) {
    	    System.out.println("ligne=" + nodeLabelMatcher.group(0));
    	    System.out.println("string=" + nodeLabelMatcher.group(2));
    	}
        }
     
    }
    Merci

  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,


    C'est tout à fait normal puisque \w correspond à ceci : [a-zA-Z_0-9]
    C'est à dire seulement les lettres de A à Z (minuscule et majuscule), les chiffres et le caractères underscore...

    Si tu veux tout les caractères il faut utiliser le point et donc .+.
    Et pour éviter de prendre la quote final il faut utiliser .+? qui prendra la chaine la plus petite au lieu de la plus grande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String pattern = "\\$\\$ (.+?) \"(.+?)\""

    Autre astuce : utiliser \p{L} pour représenter toutes les lettres, cela incluera majuscule, minuscule et lettres accentués


    Plus d'info : http://javasearch.developpez.com/j2s...x/Pattern.html

    a++

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 38
    Points : 69
    Points
    69
    Par défaut
    Ca m'a l'air normal, il me semble que justement ton \\w ne va matcher que les alphanumériques.
    Je pense qu'avec le caractère générique . ça ira sans doute mieux, mais le truc c'est que ça prendra tout justement, surtout si t'as des " dans les chaines et tout pfiou !


    EDIT : grilled,

    EDIT 2 : mais attention au .+? justement ça prends la plus ptite chaine , donc ton string s'arretera au premier (enfin le second plutot) ".

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Ok merci les gars, jvais essayer un truc du genre:

    [\p{L}&&\p{Punct}]

    Parce-qu'il me faut même des phrases dans le string.

    "Hello, you"
    "{abc}{abzfzfz}"
    "(a+b)^2 (a+b)^2 (a+b)^2"

    en fait tout saut les quotes

    edit: lol bon en fait ça marche tout simplement le .+?

    Merci les gens

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/03/2013, 10h50
  2. Expression régulière : caractère "^"
    Par SkyBioSS dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/07/2008, 09h45
  3. Passage de paramètres contenant des caractères spéciaux (+, -,etc.)
    Par Mil17 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/06/2008, 11h21
  4. [Expression régulière] Caractères en hexadécimal
    Par Kcirtap dans le forum Général Java
    Réponses: 5
    Dernier message: 31/03/2008, 10h30
  5. Réponses: 13
    Dernier message: 29/01/2008, 10h56

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