2012-08-04 2 views
0

나는 uri 패턴을 가지고 있으며 일부 값으로 채 웁니다. 저는이 두 변수 만 있습니다.배열의 일부 값으로 패턴을 채우는 방법

$pattern = "/^(?P<scope>[a-zA-Z]+)\/(?P<node>[a-zA-Z]+)\/(?P<controller>[a-zA-Z]+)\/(?P<action>[a-zA-Z]+)$/"; 

$replacement = array('scope'=>'Modules', 'node'=>'Index', 'controller'=>'Index', 'action'=>'index'); 

와 내가 방법을 찾고 있어요이 출력을 가지고 : 모듈/인덱스/색인/인덱스

당신을 감사합니다!

+1

그것은 정규 표현식을 반대 할 필요는 불가능합니다; Zend Framework는 sprintf 형식을 사용하여 경로를 다시 어셈블하는 방법을 지정하여 라우터에서이 문제를 해결합니다. http://framework.zend.com/manual/en/zend.controller.router.html#zend.controller.router .routes.regex (해당 섹션의 마지막 두 예제 참조) – cmbuckley

+0

유용했습니다;) ... 감사합니다! – Mohebifar

답변

1
$output = substr($pattern, 2, -2); 
$output = stripcslashes($output); 
foreach ($replacement as $key => $value) 
    $output = str_replace("(?P<$key>[a-zA-Z]+)", $value, $output); 
+0

좋은 접근 방법입니다. 고마워요! – Mohebifar

0

정규식에 반대는 PHP의 않는 str_replace를 사용하지만 이것은 당신의 URI에 따라 유용 할 수 있습니다 ...

$oldURI = 'blah/<scope>/<node>/<controller>/<action>/'; 
$search = array('<scope>','<node>','<controller>','<action>'); 
$replace = array('Modules','Index','Index','index'); 
$newURI = str_replace($search, $replace, $oldURI); 
+0

감사합니다! 하지만 불행히도 내 프로젝트 전체에 정규식을 사용했습니다! Regex : D를 사용하여 라우팅 시스템을 작성했습니다. 이제 컨트롤러의 네임 스페이스를 전달하고 데코 레이팅 된 링크를 반환하는 linkAnchor 클래스가 있습니다. 그리고 그것은 정규식 목록에서 검색하고 일치 하나를 찾으십시오 : ( – Mohebifar

+0

http://stackoverflow.com/questions/9041346/search-and-replace-whole-string-with-replacement 질문에 대답합니까 – neokio

+0

이후로 나는 패턴에 대한 문자열을 사용하여 교체 용 배열을 사용할 수 없습니다. 감사합니다. – Mohebifar

관련 문제