2009-09-26 4 views

Répondre

2

Quel tutoriel lisiez-vous? Celui du soleil aborde ce sujet de manière assez approfondie, mais vous devez le lire correctement :)

La capture d'une partie d'une chaîne se fait à travers les parenthèses. Si vous voulez capturer un groupe dans une chaîne, vous devez mettre cette partie de l'expression régulière entre parenthèses. Les groupes sont définis dans l'ordre dans lequel les parenthèses apparaissent, et le groupe avec l'index 0 représente la chaîne entière.

Par exemple, l'expression rationnelle "Day ([0-9] +) - Note ([0-9] +)" définirait 3 groupes:

  • groupe (0): la chaîne complète
  • groupe (1): le premier groupe dans l'expression rationnelle, à savoir le nombre de jours
  • groupe (2): le deuxième groupe dans l'expression rationnelle, à savoir la note numéro

En ce qui concerne le code réel et comment récupérer les groupes que vous avez définis dans votre regexp, consultez la documentation Java, en particulier la classe Matcher et sa méthode de groupe: http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/Matcher.html

Vous pouvez tester votre regexps avec cet outil très utile: http://www.cis.upenn.edu/~matuszek/General/RegexTester/regex-tester.html

Hope this aidé, Vive

0

Vous pouvez utiliser la méthode Matchergroup(int):

Pattern p = Pattern.compile("My name is (.*)"); 
    Matcher m = p.matcher("My name is akf"); 
    m.find(); 
    String s = m.group(1); //grab the first group* 
    System.out.println(s); 

sortie:

akf 

* regard sur matching groups

1

Notez l'utilisation des parenthèses dans le modèle et la méthode group() sur Matcher

import java.util.regex.*; 

public class Example { 
    static public void main(String[] args) { 
     Pattern regex = Pattern.compile("My name is (.*)"); 
     String s = "My name is Michael"; 
     Matcher matcher = regex.matcher(s); 

     if (matcher.matches()) { 
      System.out.println("original string: " + matcher.group(0)); 
      System.out.println("first group: " + matcher.group(1)); 
     } 
    } 
} 

sortie est:

original string: My name is Michael 
first group: Michael 
+0

Je ne comprends pas le concept de groupe. disons que j'ai une chaîne "Mon nom est Michael Jackson, son nom est Barack Obama". Et je veux capturer "Michael Jackson" et "Barack Obama". Comment fait-on ça? – Saobi

+0

@Saobi: notez les parenthèses !!!! –

+0

Ok. Je l'ai. J'ai eu un autre plus difficile: Est-ce que xxx xxx xxx (pourrait être un nombre de mots) vivent ou meurent? Je veux capturer: xxxxxx, vivre, mourir. Comment faire? – Saobi

0
Matcher m = Pattern.compile("name is (.*)").matcher("My name is Ross"); 
if (m.find()) { 
    System.out.println(m.group(0)); 
    System.out.println(m.group(1)); 
} 

Les parens forment un groupe de capture . Le groupe 0 est le modèle entier et le groupe 1 est le référence arrière.

Les résultats du programme ci-dessus:

name is Ross 
Ross 
Questions connexes