$re = '/league/((?P<league_slug>[\w-]+)(/(?P<season_slug>\d{4}(-\d{4})?))?(/(?P<action_slug>[\w\-\_]+[(-|_)]?[\w]+))?)?(/)?/mi';
$str = 'http://localhost:8010/league
http://localhost:8010/league/
http://localhost:8010/league/serie-a
http://localhost:8010/league/serie-a/
http://localhost:8010/league/serie-a/2016
http://localhost:8010/league/serie-a/2016/
http://localhost:8010/league/serie-a/2015-2016
http://localhost:8010/league/serie-a/2015-2016/
http://localhost:8010/league/serie-a/s-t-a-n-d-i-n-g-s
http://localhost:8010/league/serie-a/stand_-aasdings/
http://localhost:8010/league/serie-a/2016/standings
http://localhost:8010/league/serie-a/2016/standings/
http://localhost:8010/league/2016
http://localhost:8010/league/2016/
http://localhost:8010/league/standings
http://localhost:8010/league/standings/';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php