2014-06-11 2 views
0

내가 같은 사용자 정의 HTML 태그를 교체하려는 사용자 정의 태그 내에서 HTML/값을 대체합니다한 번만

<!-- {start %x%} -->Data<!-- {mid %x%} -->Data<!-- {end %x%} --> 

한 번만 발생 될 것입니다 대체합니다. 아래의 HTML에는 두 개의 사용자 정의 HTML 태그가 있습니다. 올바른 정규식은 무엇입니까?

$pattern_loop = "/\<\!\-\- \{start %x%\} \-\-\>(.*)" . 
"(\<\!\-\- \{mid %x%\} \-\-\>)(.*)\<\!\-\- \{end %x%\} \-\-\>/"; 
$html= '<!-- {start %x%} --><br />Your account must be approved before you can login. Once approved you can log in by using your email address and password by visiting our website or at the following URL:<br /><!-- {mid %x%} --><br />Your account has now been created and you can log in by using your email address and password by visiting our website or at the following URL:<br /><!-- {end %x%} --><br /><!-- {start %x%} --><br />Your account must be approved before you can login. Once approved you can log in by using your email address and password by visiting our website or at the following URL:<br /><!-- {mid %x%} --><br />Your account has now been created and you can log in by using your email address and password by visiting our website or at the following URL:<br /><!-- {end %x%} -->'; 
$return= preg_replace($pattern_loop, "Content", $html, 1); 

header('content-type: text/plain'); 
echo $return; 
exit; 

전류 출력은 :

Content 

예상 출력, 그냥 한 번에 사용자 정의 태그를 대체 :

Content<br /><!-- {start %x%} --><br />Your account must be approved before you can login. Once approved you can log in by using your email address and password by visiting our website or at the following URL:<br /><!-- {mid %x%} --><br />Your account has now been created and you can log in by using your email address and password by visiting our website or at the following URL:<br /><!-- {end %x%} --> 
+0

, 그것은 단지 연결처럼 보인다합니다. – Toto

+0

태그를 한 번만 교체하고 preg_replace를 사용하여 수행하는 방법 –

답변

1

를 사용하여 정규 표현식의 끝 부분에 앞서 긍정적 인 모습.
는 그냥 불필요한 탈출을 제거하고 텍스트 단순화했습니다 :

$pattern_loop = "/<!-- \{start %x%\} -->.*?<!-- \{mid %x%\} -->.*?<!-- \{end %x%\} -->(?=.*<!-- \{start %x%\} -->)/"; 
$html= '<!-- {start %x%} --><br />start 1<br /><!-- {mid %x%} --><br />mid 1<br /><!-- {end %x%} --><br /><!-- {start %x%} --><br />start 2<br /><!-- {mid %x%} --><br />mid 2<br /><!-- {end %x%} --><br /><!-- {start %x%} --><br />start 3<br /><!-- {mid %x%} --><br />mid 3<br /><!-- {end %x%} -->'; 
$return= preg_replace($pattern_loop, "Content", $html, 1); 

echo $return; 

출력 : 나는 당신의 예상 출력을 얻을하지 않습니다

Content<br /><!-- {start %x%} --><br />start 2<br /><!-- {mid %x%} --><br />mid 2<br /><!-- {end %x%} --><br /><!-- {start %x%} --><br />start 3<br /><!-- {mid %x%} --><br />mid 3<br /><!-- {end %x%} --> 
+0

고마워요. 작동합니다. Lookahead는 좋은 해결책이 될 것입니다. 이전 문자가 패턴과 일치해야합니다. 그것을 사용하는 것에 대해 명확한 이해를하지 말고, 교체 용 범위를 만들 수도 있습니다. 나는 5 표 이상을 줘야한다. –

+0

@ JokoWandiro : 천만에요. – Toto