2010-03-01 5 views
3

J'ai besoin d'une expression regex pour faire correspondre une chaîne entre guillemets, puis un espace blanc puis un crochet rond puis un crochet bouclé.Comment faire correspondre une chaîne entre guillemets suivie d'une chaîne entre accolades?

Par exemple ceci est le texte que je veux correspondre à Java:

"'Allo 'Allo!" (1982) {A Barrel Full of Airmen (#7.7)}

Qu'est-ce que l'expression rationnelle pour ce être? Désolé, mais je suis vraiment perdu. J'ai essayé beaucoup de choses différentes mais maintenant je suis tellement perplexe.

+0

"(. *)" \ (([0-9] [0-9] [0-9] [0-9]) \) \ {(. *) \} – vladr

Répondre

3

"[^"]*"\s*\([^)]*\)\s*\{[^}]*\}

+0

this échouera si le titre contient des guillemets :) – vladr

3

Cela devrait le faire:

Pattern p = Pattern.compile("\"(.*?)\"\\s+\\((\\d{4})\\)\\s+\\{(.*?)\\}"); 
Matcher m = p.matcher("\"'Allo 'Allo!\" (1982) {A Barrel Full of Airmen (#7.7)}"); 
if (m.find()) { 
    System.out.println(m.group()); 
    System.out.println(m.group(1)); 
    System.out.println(m.group(2)); 
    System.out.println(m.group(3)); 
} 

sortie:

"'Allo 'Allo!" (1982) {A Barrel Full of Airmen (#7.7)} 
'Allo 'Allo! 
1982 
A Barrel Full of Airmen (#7.7) 
+0

pourrait être plus sélectif sur l'année (4 chiffres) pour éviter les fausses correspondances dans le cas d'intrants mal intentionnés – vladr

+0

je le veux comme un grand groupe pas 3 c'est le problème .... –

+0

tu veux dire comme toute ta ligne originale, ie ' m.group (0) '? – vladr

0

"[^"] + "\ s ([^)] +) \ s {[ ^}] +}

Questions connexes