На самом деле вы мало что можете сделать, чтобы уменьшить дублирование:
^([^\/]+\/)([^\/]+\/)([^\/]+\/)$
Предупреждение говорит вам, что повторяющаяся группа, такая как ([^\/]+\/){3}
, будет захватывать только последний повтор.Вы можете подумать, что ([^\/]+\/){3}
- это 3 группы, но это только одна группа, потому что есть только одна пара скобок.Эта группа будет содержать последнее, что соответствует квантификатору, в данном случае c/
.
Таким образом, чтобы иметь 3 группы, необходимо иметь 3 пары скобок.
Если вы действительно хотите сделать регулярное выражение короче, вы можете попробовать:
[^\/]+\/
Это создаст 3 совпадений вместо групп, но вам придется проверить, используя код,что:
- существует ровно три совпадения
- конец каждого совпадения является началом следующего совпадения
- первый совпадение начинается в начале строки
- последний матч заканчивается в конце строки
, чтобы достичь того же эффекта, что и исходное регулярное выражение.