Regex

Résolu
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 - 23 sept. 2007 à 11:51
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 - 27 sept. 2007 à 20:54
Bonjour à tous.
j'ai un petit pb avec les regex. je voudrais pouvoir localiser dans un texte tous les
{ "(" n'importe quoi ")" n'import quoi "(" nimporte quoi ")" } 
mais pas
{ "(" n'importe quoi ")" n'import quoi  "(" n'importe quoi ")" }
En gros, trouver une parenthèse ouverte et recupérer la position de la parenthèse fermé qui est juste après elle; il peut y avoir d'autre parenthèses ouverte MAIS dès que l'on renconte une parenthèse fermée, c'est fini (On reprend la recherche avec la prochaine parenthèse ouverte).
j'ai fait un code (pas en regex) qui fonctionne, mais je préférerais avoir des regex partout dans mon prog:

//Les positions de début et de fin (s Start et e End)
  int s = 0;
  int e = 0;
  
  //Pour savoir si on a déjà ouvert une parenthèse
  boolean ns = false;
  
  //Le texte dans lequel on cherche
  String t = doc.getText(0, doc.getLength());
  
  //On parcours le texte
  for (int a=0; a<doc.getLength(); a++) {
   
   //On détecte la première parenthèse (parenthèse d'ouverture)
   if ((t.charAt(a) == '(') && !ns) {
    
    s = a;
    ns = true;
    
   }
   
   //On détecte le deuxième parenthèse (parenthèse de fermeture)
   if ((t.charAt(a) == ')') && ns) {
    
    e = a+1;
    ns = false;
    
    colorer(s, e, "blabla");
    
   }
   
  }

merci.

3 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
27 sept. 2007 à 13:51
Salut,

voici un exemple de code avec l'utilisation des regex java... bon normalement il devrait résoudre ton problème et alléger le code (parce que ce que tu fais est super lourd je trouve) :

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

    public static void main(String[] args) {
        String input = "n'importe quoi 1 ( n'importe quoi 2 ) n'importe quoi 3 ( nimporte quoi 4) n'importe quoi 5";
        Pattern p = Pattern.compile("\\([^\\)\\(]*\\)");
        Matcher m = p.matcher(input);

        int begin=0, end=0;
        while(m.find(0)) {
            System.out.println("New string for search : "+input);
            begin = m.start(0);
            end = m.end(0);
            System.out.println("begin="+begin+",end="+end);
            System.out.println(input.substring(begin, end));
            input = input.substring(end);
            m = p.matcher(input);
        }
       
    }
}

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
3
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
26 sept. 2007 à 21:10
RE....
j'avais aussi essayé "(.+)" mais ca ne me correspond pas non plus (car il prend tous les caractères; "(" n'importe quoi ")" n'import quoi  "(" n'importe quoi ")").

merci....
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
27 sept. 2007 à 20:54
slt.
merci beaucoup. c'est exactement ce dont j'avais besoin (pour finir la synthaxe avec que des regex.).
merci.
0
Rejoignez-nous