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