如何修复这个正则表达式?

Rop*_*tah 1 php regex

我有一个正则表达式来从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}*

/ {子动作}*

Wel*_*bog 6

对我来说,看起来你的{(.*?)}\*测试是匹配所有的{action}/{id}*,从你所写的不是你想要的.

因此,将Kleene闭包更改为不那么贪心:

'~/{([^}]*)}\*~'
Run Code Online (Sandbox Code Playgroud)

但你真的需要捕捉花括号内的部分吗?在我看来,你可以选择这个:

'~/{[^}]*}\*~'
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,该[^}]*部分保证表达式不匹配,{action}/因为它不以星号结尾.