Regular Expression Problem

Sebastian29

Erfahrenes Mitglied
Hi an alle!

Ich möchte gerne in jeder m.group( ... ) den Platzhalter setzen, z.B.

m.group(0) = "@@Name@@";
m.group(1) = "@@Nummer@@";
m.group(2) = "@@PersNr@@";

und im StringBuffer soll dann so stehen: "@@Name@@, @@Nummer@@, @@PersNr@@"!

Das Problem ist nur wegen der Regular Expression!

Ich habe zwar den ersten untenstehenden Schritt gemacht, aber die Regular Expression ist nicht ganz sauber!

Code:
String text = "Hallo @@Name@@! Ich brauche meine Nummer: @@Nummer@@! Deine PersNr lautet: @@PersNr@@!";

StringBuffer buf = new StringBuffer();
Pattern p = Pattern.compile("[.*\\@\\@[a-zA-Z0-9]\\@\\@.*]+");
Matcher m = p.matcher( text );
boolean bFound = m.find();

if( bFound )
{
      for( int i = 0; i < m.groupCount(); i++ )
      {
            if( i == (m.groupCount()-1) )
                  buf.append( m.group(i) );
            else
                 buf.append( m.group(i) + ", " );
      }

      setTemplatesMissing( buf.toString() );
      buf = null;
}

Gruß
 
Probiers mal so:
Java:
Pattern.compile(".*\\@\\@[a-zA-Z0-9]*\\@\\@.*");

Der Text zwischen den @ soll ja beliebig lang sein. Außerdem ist die Gruppierung des gesamten Ausdrucks unnötig - genau genommen sogar falsch.
 
Hi!

Nein, das klappt nicht!

Ja, zwischen den beiden Klammeraffen ist die Wortlänge beliebig, deshalb habe ich auch (.*) dazwischen gesetzt:

Code:
Pattern.compile("[.*\\@\\@(.*)\\@\\@.*]+");  <--- So kriege ich als Ergebnis nur die @@-Zeichen ( 6 Stück gefunden )

Klappt auch nicht!

Ich will ja alle Platzhalter aus dem Text herausschneiden!

Gruß
Sebastian29
 
Ich bins nochmal!

So, jetzt gerade habe ich eine Lösung gefunden:

Code:
Pattern.compile("@@(.*?)@@");

Genau das habe ich gesucht! Trotzdem danke für die Hilfe! :-)

Gruß
Sebastian29
 
Warum hast du denn die @ escaped?

Auf jeden Fall macht es keinen Sinn am Anfang .* zu schreiben, denn Punkt matcht alles, also eigentlich auch ein @. Du willst das aber nicht matchen.

Weiterhin musst du das was du als Gruppe raushaben willst, dann auch noch als Capturing Group, also in Klammer, markieren. Die Gruppen gehen meine ich auch bis <= und nicht nur bis < weil:

Group zero denotes the entire pattern by convention. It is not included in this count.

Es muss also auch noch heißen i = 1.
 
Zurück