i have a regular expression to remove certain parts from a URI. However it doesn't take into account multiple parts in a way that works :-). Can somebody assist?
$regex = '~/{(.*?)}\*~'
$uri = '/user/{action}/{id}*/{subAction}*';
$newuri = preg_replace($regex, '' , $uri);
//$newuri = /user/
//Should be: $newuri = /user/{action}/
I know it matches the following part as one match:
/{action}/{id}/{subAction}
But it should match the following two seperately:
/{id}*
/{subAction}*
To me it looks like your {(.*?)}\*
test is matching all of {action}/{id}*
, which judging from what you've written isn't what you want.
So change the Kleene closure to be less greedy:
'~/{([^}]*)}\*~'
But do you really need to capture the part inside the curly braces? Seems to me you could go with this one instead:
'~/{[^}]*}\*~'
Either way, the [^}]*
part guarantees that the expression will not match {action}/
because it doesn't end in an asterisk.