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,

Antworten auf die Frage(1)

Ihre Antwort auf die Frage