2009-08-12 3 views
1

URI에서 특정 부분을 제거하는 정규식이 있습니다. 그러나 그것은 작동하는 방식으로 여러 부분을 고려하지 않습니다 :-). 누군가 도울 수 있습니까?이 정규 표현식을 수정하는 방법은 무엇입니까?

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

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

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

나는 그것이 하나의 일치로 다음과 같은 부분을 일치 알고

/{동작}/{ID} /{서브 액션}

그러나 다음과 일치해야합니다 두 가지 별도로 :

/{id} *

당신의 {(.*?)}\* 테스트 당신이 쓴 것과 판단하는 {action}/{id}*의 모든 일치처럼

/{서브 액션} *는 나에게

답변

6

그것은 당신이 원하는 것이 아니다 보인다.

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

을하지만 당신은 정말 중괄호 내부의 일부를 캡처해야합니까 :

그래서 덜 욕심하기 위해 Kleene 클로저를 변경? 이 별표로 끝나지 않기 때문에식이 {action}/ 일치하지 않을 것이라는 [^}]* 부품 보증,

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

어느 방법 : 대신이 하나 갈 수있는 날 것으로 보인다.

+0

함께 생각해 주셔서 감사합니다! 이것은 내가 필요한 것입니다! – Ropstah

관련 문제