'Repeating variable length segments in Regex

I'm trying to match the following with this Regexp:

/(?<route>(?:.*\/){1,2}?)(?<group>(?:.*\/){1,2}+)?/
  • route/group/
  • route1/route2/group/group2/
  • route/group1/group2/
  • route/

Tried to make the first group lazy and the second one greedy and optional but it doesn't match. What am I missing?

Initial Demo: https://regex101.com/r/aRvvQE/2



Solution 1:[1]

Assuming there is a file extension at the end of the path then you could use:

(?<route>(?:[^/\s]*\/){1,2}?)(?<group>(?:[^/\s]*\/){0,2})(?=[^/]*\.)

If not then change \. to $ or whatever suits.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 MikeM