Мое первоначальное закрытие было недостаточным для удовлетворения всех требований. Да, у вас есть жадная проблема с квантификатором, но есть еще что-то, что нужно обработать.
Код: ( Demo ) ( Regex101 Demo )
$tests = [
'abc-def/something/else/',
'abc-def-2019/something/else/',
'abc-def-2019-2020/something/else/',
'abc-def-125-2019/something/else/'
];
var_export(
preg_replace('~^(?:[a-z\d]+-?)*?(?:/|(?=20\d{2}-?){1,2})~', '', $tests)
);
Вывод:
array (
0 => 'something/else/',
1 => '2019/something/else/',
2 => '2019-2020/something/else/',
3 => '2019/something/else/',
)
Мой шаблон соответствует буквенно-цифровым последовательностям, за которыми может следовать дефис - подшаблон, который может повторяться ноль или более раз («отдача», то есть не жадность, когдавозможно).
Затем за первой группой без захвата должна следовать косая черта (которая совпадает) или подстроки вашего года, которые также могут иметь конечный дефис (это не совпадает, но найдено через заглядывание)).
Если это не подходит для данных ваших реальных проектов, вам нужно будет предоставить все более и более точные образцы для тестирования, по которым выявляются дополнительные случаи.