Регулярное выражение: все кроме?
Проверьте:if( preg_match_all('/(\w+)\](?!\))/', '[controller]/[action](/[id])', $matches) )
{
    var_dump($matches[1]);
}
Проверьте:if( preg_match_all('/(\w+)\](?!\))/', '[controller]/[action](/[id])', $matches) )
{
    var_dump($matches[1]);
}