pgoetz: RegEx in Java

Beitrag lesen

Nachtrag: bei mir hat es mit einer non-capturing group auch nicht funktioniert. Allerdings läuft die folgende Regular Expression:
.*(?<=99|T1|M2|M4|S2|S4|L2|G2|O6|Z6|O7|T5|M5|M3|P4|Q6|Q7|P9|T1|A8|F4{4})([A-Za-z0-9_]*)

Ich habe am Anfang einfach mal auf .* gematched, weil ich nicht wusste, welche Zeichenfolge vor den vier Doppelzeichen erlaubt ist und welche nicht. Dann habe ich noch das eigentlich zu suchende Pattern als capturing group definiert, um es dann später rauszuschneiden.
Hier noch kurz die Testklasse:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test
{
    public static void main(String[] args)
    {
        String test = "MM20_T1S2P999SAHH";
        String regex = ".*(?<=99|T1|M2|M4|S2|S4|L2|G2|O6|Z6|O7|T5|M5|M3|P4|Q6|Q7|P9|T1|A8|F4{4})([A-Za-z0-9_]*)";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(test);

System.out.println(matcher.matches());

String group = matcher.group(1);

System.out.println(group);
    }
}

Schöne Grüße,

Peter

Servus,

[...]
Exception in thread "main" java.util.regex.PatternSyntaxException: Look-behind group does not have an obvious maximum length near index 70
(?<=(99|T1|M2|M4|S2|S4|L2|G2|O6|Z6|O7|T5|M5|M3|P4|Q6|Q7|P9|T1|A8|F4){4})[A-Za-z0-9_]*

Das ist jetzt nur eine Vermutung, weil ich bei Capturing Groups und Lookahead / -behind immer ein wenig warmlaufen muss beim Überlegen, aber könnte es daran liegen, dass Du Deine OR-verbundenen Teilstrings als Capturing Group notiert hast, und das Ganze in einem lookbehind, der ja per se nicht mitgecaptured (sorry, finde kein schönes deutsches Wort) wird? Vielleicht geht es als non-capturing group: (?:X)
-> http://java.sun.com/javase/6/docs/api/ -> Klasse Pattern

Schöne Grüße,

Peter