Я пытаюсь захватить два фрагмента строки, но игнорирую что-либо после, если будет найден один из двух токенов.
Примеры:
a/b/c
будет match (1) a/b/
и (2) c
a/b
будут соответствовать (1) a/
и (2) b
a
будут соответствовать (1) <nil>
и (2) a
1016 1023 *
Примеры:
a/b/c/foo/d
игнорирует /foo/d
и соответствует (1) a/b/
и (2) c
a/b/c/bar/d
игнорирует /bar/d
и match (1) a/b/
и (2) c
Итак, я попробовал это: ^(.*/)*(.*)(?:/(?:foo|bar)/.*)$
и второй набор примеров совпадает, но первый нет ... потому что я не сделайте вторую половину необязательной.
Затем я попытался сделать ее необязательной ^(.*/)*(.*)(?:/(?:foo|bar)/.*)?$
: и теперь жадность первой части берет верх, и ничего не совпадает.
Есть ли способ заставить это работать?