我有一个正则表达式来从URI中删除某些部分.然而,它没有考虑多种部件的工作方式:-).有人可以帮忙吗?
$regex = '~/{(.*?)}\*~'
$uri = '/user/{action}/{id}*/{subAction}*';
$newuri = preg_replace($regex, '' , $uri);
//$newuri = /user/
//Should be: $newuri = /user/{action}/
Run Code Online (Sandbox Code Playgroud)
我知道它与以下部分匹配为一个匹配:
/ {action}/{id} / {subAction}
但它应该分别匹配以下两个:
/{ID}*
/ {子动作}*
对我来说,看起来你的{(.*?)}\*测试是匹配所有的{action}/{id}*,从你所写的不是你想要的.
因此,将Kleene闭包更改为不那么贪心:
'~/{([^}]*)}\*~'
Run Code Online (Sandbox Code Playgroud)
但你真的需要捕捉花括号内的部分吗?在我看来,你可以选择这个:
'~/{[^}]*}\*~'
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,该[^}]*部分保证表达式不匹配,{action}/因为它不以星号结尾.