Измените свое регулярное выражение на:
tags\/([0-9]+)\/(.*?)(?:\/([0-9]+))?$
Regex101 demo .
Изменения в вашем регулярном выражении:
(.*?)
Изменен квантификатор во второй группе на ленивый, чтобы он не совпадал со всем, что следует за ним.
(?:\/([0-9]+))
Добавили следующий слеш и цифры в группу без захвата и сделали все это необязательным.
В конце добавили $
, чтобы убедиться, что ленивое совпадение продолжаетконец строки, если третьей группы не существует.