2011-09-06 3 views
0
function replaceContent($matches = array()){ 
    if ($matches[1] == "nlist"){ 
     // do stuff 
     return "replace value"; 
    } elseif ($matches[1] == "alist"){ 
     // do stuff 
     return "replace value"; 
    } 

    return false; 
} 

preg_replace_callback('/<([n|a]list)\b[^>]*>(.*?)<\/[n|a]list>/','replaceContent', $page_content); 

$ 일치()의 대체 값을 변경하면이 배열을 반환 순간는 preg_replace_callback replaceContent에서

Array 
(
    [0] => <nlist>#NEWSLIST#</nlist> 
    [1] => nlist 
    [2] => #NEWSLIST# 
) 

Array 
(
    [0] => <alist>#ACTIVITYLIST#</alist> 
    [1] => alist 
    [2] => #ACTIVITYLIST# 
) 

내 preg_replace_callback 기능은 $와 일치하는 값을 대체 일치 [0]. 내가 뭘 하려는지 궁금해 할 수있는 경우에도 태그 ($ matches [2]) 안의 모든 것을 교체하고 동시에 $ matches [1] 검사를 수행 할 수 있어야합니다. 여기

테스트 내 정규식 : http://rubular.com/r/k094nulVd5

답변

1

당신은 단순히 변경 대체 할 당신이하지을 부품을 포함하는 반환 값을 조정할 수 있습니다

function replaceContent($matches = array()){ 
    if ($matches[1] == "nlist"){ 
     // do stuff 
     return sprintf('<%s>%s</%s>', 
         $matches[1], 
         'replace value', 
         $matches[1]); 
    } elseif ($matches[1] == "alist"){ 
     // do stuff 
     return sprintf('<%s>%s</%s>', 
         $matches[1], 
         'replace value', 
         $matches[1]); 
    } 

    return false; 
} 

preg_replace_callback('/<([n|a]list)\b[^>]*>(.*?)<\/[n|a]list>/','replaceContent', $page_content); 

참고 :

  1. 내부 패턴 sprintfpreg_replace_callback에 사용 된 정규식을 기반으로 생성됩니다.
  2. 대체 문자열에 원본의 추가 정보 (예 : <nlist> 또는 <alist> 태그의 가능한 속성)가 포함되어야하는 경우이 데이터를 캡처 그룹에도 가져와 $matches 내부에서 사용할 수 있도록해야합니다.