Java-Regex: Negativer Lookahead
Ich versuche, zwei reguläre Ausdrücke zu erstellen, die mit URIs übereinstimmen. Diese URIs haben das Format:/foo/someVariableData
und/foo/someVariableData/bar/someOtherVariableData
Ich brauche zwei reguläre Ausdrücke. Jeder muss übereinstimmen, aber nicht der andere.
Die Regexes, die mir ursprünglich einfielen, waren:/foo/.+
und/foo/.+/bar/.+
beziehungsweise.
Ich denke, der zweite reguläre Ausdruck ist in Ordnung. Es stimmt nur mit der zweiten Zeichenfolge überein. Der erste reguläre Ausdruck stimmt jedoch mit beiden überein. Also fing ich an (zum ersten Mal) mit negativem Lookahead herumzuspielen. Ich habe den Regex entworfen/foo/.+(?!bar)
und richten Sie den folgenden Code zum Testen ein
public static void main(String[] args) {
String shouldWork = "/foo/abc123doremi";
String shouldntWork = "/foo/abc123doremi/bar/def456fasola";
String regex = "/foo/.+(?!bar)";
System.out.println("ShouldWork: " + shouldWork.matches(regex));
System.out.println("ShouldntWork: " + shouldntWork.matches(regex));
}
Und natürlich entschließen sich beide dazutrue
.
Weiß jemand was ich falsch mache? Ich muss Negative Lookahead nicht unbedingt verwenden, ich muss nur das Problem lösen, und ich denke, dass Negative Lookahead eine Möglichkeit sein könnte, dies zu tun.
Vielen Dank,