Регулярное выражение Java: отрицательный прогноз

Я пытаюсь создать два регулярных выражения, которые будут соответствовать URI. Эти URI имеют формат: /foo/someVariableDataи /foo/someVariableData/bar/someOtherVariableData

Мне нужны два регулярных выражения. Каждый должен соответствовать одному, но не другому.

Сначала я придумал следующие регулярные выражения: /foo/.+и /foo/.+/bar/.+соответственно.

Я думаю, второе регулярное выражение подходит. Он будет соответствовать только второй строке. Однако первое регулярное выражение соответствует обоим. Итак, я начал играть (впервые) с негативным просмотром вперед. Я разработал регулярное выражение /foo/.+(?!bar)и настроил следующий код для его проверки

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));
}

И, конечно же, оба они разрешаются в true.

Кто-нибудь знает, что я делаю не так? Мне не обязательно использовать отрицательный просмотр вперед, мне просто нужно решить проблему, и я думаю, что отрицательный просмотр вперед может быть одним из способов сделать это.

Спасибо,

35
задан james.garriss 23 May 2014 в 11:25
поделиться