2009-08-12 28 views
1

私はURIから特定の部分を削除する正規表現を持っています。しかし、それは働く方法で複数の部分を考慮に入れません:-)。誰かが助けることができますか?この正規表現を修正する方法は?

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

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

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

私はそれが1つの試合のように、次の部分に一致する知る:

/{アクション}/{ID} /{サブアクション}

しかし、それは次のように一致する必要があります2つの別個に:

/{id} *

あなたの {(.*?)}\*テストは、あなたが書かれたものから判断され、 {action}/{id}*のすべてを一致さのような

/{サブアクション} *は私に

答えて

6

それはあなたが望むものではないに見えます。

だから、あまり貪欲であることをクリーネ閉包を変更:

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

しかし、あなたは本当に、中括弧内の一部をキャプチャする必要がありますか?あなたの代わりに、このいずれかで行くことができるように思える:

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

いずれかの方法を、[^}]*部分は、それがアスタリスクで終わっていないので、式は{action}/と一致しないことが保証されます。

+0

一緒に考えてくれてありがとう!これは私が必要とするものです! – Ropstah