Problem mit Regex

Status
Nicht offen für weitere Antworten.

Macro

Mitglied
Moin Moin.
Ich habe diese Frage schon in einem anderen Forum gestellt und auch schon einen Lösungsansatz erhalten, aber so ganz funktioniert das noch nicht.

Mein Problem:
Code:
<tag>TEST</tag>
TEST<tag ...>
<tag>TEST
TEST
Es kann vorkommen, dass ich (bei einem vorherigen Regex) einen String erhalte der einen dieser Fälle enthällt. Jetzt benötige ich einen weiteren Regex der mir für jeden dieser Fälle jeweils nur TEST ausgibt.

Ein Ansatz war
Code:
(<\\w*?>)?(\\w*)(<\\w*?>)
der aber noch nicht so ganz funktioniert (Leerzeichen und teile des tags werden auch ausgegeben)

Thx
 
Hi,

wenn ich dich richtig verstanden habe willst du einen String suchen, von dem aber nur einen bestimmten Teil weiter auswerten. Informier dich doch mal über Capturing Groups (z.B. in der JavaDoc von java.util.regex.Pattern). Dann kannst du dir einen Reg. Ausdruck der Form A(B)C aufbauen und den B-Teil unabhängig vom Rest auswerten.

Liebe Grüße,

PyroPi
 
Danke für die Hilfe, aber so ganz funktionierts noch nicht.
Code:
public static void main( String[] args ) {
        String test = "MES-Daten Import f&r OP <low:toolTip name=\"TIME_PERIODE\" bean=\"<%=LowWebappInfermWebSymbols.TIMEPERIOD_RESULT_VIEW%>\" />
";

        //String regex = "<{0,1}\\w*?>{0,1}(\\w*)<{0,1}";
        String regex = "(<[^>].*>){0,1}(\\w*)(<[^>].*>){0,1}";

        Matcher matcher = Pattern.compile( regex ).matcher( test );
        int index = 0;
        while( matcher.find() ) {
            System.out.println("index: " + ++index + "\tText: " + matcher.group(2));
        }        
}

Da gibt er mir
Code:
index: 1	Text: MES
index: 2	Text: 
index: 3	Text: Daten
index: 4	Text: 
index: 5	Text: Import
index: 6	Text: 
index: 7	Text: f
index: 8	Text: 
index: 9	Text: uuml
index: 10	Text: 
index: 11	Text: r
index: 12	Text: 
index: 13	Text: OP
index: 14	Text: 
index: 15	Text: 
index: 16	Text:
aus. Ich müsste igendwie noch die Leerzeichen und Sonderzeichen (auser <>) mit reinbringen. Das wird ja mit \\sgemacht, aber dann kommt es wieder auf die Reihenfolge an (Aber das Leerzeichen ist im Content ja variabel)

[Edit]
Mit
Code:
String regex = "(<[^>].*>){0,1}(\\s?\\w*\\s?)(<[^>].*>){0,1}";
kommt genau der selbe shit *ups* raus?!?!?!?!?!
 
Code:
String regex = "(<[^>].*>){0,1}(.+?)(<[^>].*>){0,1}";
liefert zwar das richtige Ergebnis, leider in 29 einzelnen Gruppen anstatt in einer.
 
und wie wäre z.b. sowas?

Code:
String[] array=test.split("<[^>].*>");
for (int i=0;i<array.length;i++){
   System.out.println(array[i]);
}
 
split("bla blub") ist eigentlich eine gute idee, nützt mir aber nichts, da ich im späteren Verlauf Teile des Strings ersetzte (in einem StringBuffer) und dafür benötige ich die Positionsangaben, welche ich nur über ein Matcher-Objekt bekomme.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben