2010-10-05 7 views
0

Salut les gars je suis en train de comprendre d'un simple regex du texte ci-dessous:Problèmes avec mon regex en Java

<b>Name:</b> Photomatix.Pro.v4.0.64bit-FOSI<br /> 

je veux essentiellement à la production et stocker seulement Photomatix.Pro.v4.0.64bit -FOSI-à-dire la valeur réelle des thats à l'intérieur du mais quand je définis comme ceci:

private static final String REG_NAME = "<b>Name:</b>(.*)<br />"; 

il enregistre en fait et l'ensemble des sorties <b>Name:</b> Photomatix.Pro.v4.0.64bit-FOSI<br />

Des idées sur comment je peux juste extraire la valeur donnée du texte xml ci-dessus? acclamations à l'avance

+1

Si vous n'avez que XML à analyser, vous devriez essayer un analyseur XML au lieu d'expressions régulières. –

+0

J'ai marqué le commentaire "utiliser un analyseur XML à la place" comme spam/offensant - la question est très explicitement basée sur l'expression régulière, c'est-à-dire comment obtenir un groupe de capture. –

Répondre

6

Cela devrait fonctionner.

final String REG_NAME = "<b>Name:</b>(.*)<br />"; 

     String text = "<b>Name:</b> Photomatix.Pro.v4.0.64bit-FOSI<br />"; 

     Pattern pattern = Pattern.compile(REG_NAME); 

     Matcher matcher = pattern.matcher(text); 

     if (matcher.find()) { 
      System.out.println(matcher.group(1)); 
     } 
+0

'group (1)' fait l'affaire, 'group (0)' est la correspondance complète, qui est égale au résultat "inattendu" de l'OP. –

+0

gentil merci – jonney

+0

+1 Gah, viens me battre! –

0

(Je n'ai pas un compilateur Java à portée de main en ce moment je ne peux pas vérifier la réponse c'est donc pas la réponse finale, mais .. Si vous voulez vraiment le faire avec les regex, vous devriez jeter un oeil aux matchers et aux groupes dans les classes regex Java.

1
String r = "/b>(.*)<b"; 

Pattern p = Pattern.compile(r); 
Matcher m = p.matcher("<b>Name:</b> Photomatix.Pro.v4.0.64bit-FOSI<br />"); 

if (m.find()) 
{ 
    System.out.println("found: " + m.group(1)); 
} 
+0

Vous savez très bien que votre réponse est incorrecte. Il fonctionnera pour une chaîne comme "b> Nom: mgamer

+1

en effet, mais je pense que nous lui avons donné assez pour travailler avec. Nous ne pouvons pas connaître toutes ses entrées de chaîne possibles de toute façon. –

+0

Absolument Steve! +1 – mgamer

0

bien, je ne pense pas que ce soit une bonne idée d'analyser un fichier HTML en utilisant des expressions rationnelles, vous devez utiliser certains parseurs java html. Si vous voulez utiliser une expression régulière, vous pouvez vérifier quelques exemples ici: Regular Expressions

+0

Je n'étais pas au courant de leurs parseurs html java. – jonney