2009-08-12 72 views
1

我有一個正則表達式來從URI中刪除某些部分。但是,它並沒有考慮多個部分的工作方式:-)。有人可以協助嗎?如何解決這個正則表達式?

$regex = '~/{(.*?)}\*~' 

$uri = '/user/{action}/{id}*/{subAction}*'; 
$newuri = preg_replace($regex, '' , $uri); 

//$newuri = /user/ 
//Should be: $newuri = /user/{action}/ 

我知道這下面的部分相匹配的一個匹配:

/{行動}/{ID} /{子動作}

但應符合以下兩個分開:

/{id} *

/{子作用} *

回答

6

對我來說,它看起來像你的{(.*?)}\*測試匹配所有的{action}/{id}*,從你寫的判斷是不是你想要的。

因此改變克林閉包是貪心不足:

'~/{([^}]*)}\*~' 

但你真的需要捕獲大括號內的部分?在我看來,你可以用這一個,而不是去:

'~/{[^}]*}\*~' 

無論哪種方式,[^}]*部分保證,因爲它不以星號結尾的表達不匹配{action}/

+0

謝謝你一起思考!這正是我需要的! – Ropstah 2009-08-12 14:55:42