Wyrażenie Java: Negatywny poprzednik
Próbuję utworzyć dwa wyrażenia regularne, które będą pasować do identyfikatorów URI. Te identyfikatory URI mają format:/foo/someVariableData
i/foo/someVariableData/bar/someOtherVariableData
Potrzebuję dwóch wyrażeń regularnych. Każdy musi pasować do jednego, ale nie do drugiego.
Wyrażenia regularne, które wymyśliłem, to:/foo/.+
i/foo/.+/bar/.+
odpowiednio.
Myślę, że drugi regex jest w porządku. Pasuje tylko do drugiego ciągu. Pierwsze wyrażenie regularne pasuje jednak do obu. Zacząłem więc grać (po raz pierwszy) z negatywnym spojrzeniem w przód. Zaprojektowałem regex/foo/.+(?!bar)
i skonfiguruj następujący kod, aby go przetestować
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));
}
I, oczywiście, obaj postanawiajątrue
.
Czy ktoś wie, co robię źle? Nie muszę koniecznie używać Negatywnego wyglądu, muszę tylko rozwiązać problem i myślę, że ten negatywny wygląd może być jednym ze sposobów.
Dzięki,