2012-06-28 8 views
4
사이에 모든 것을 교체

가능한 중복 :
Insert string between two points with PHP이 개 태그

가 어떻게 <!-- START NOT PRINT --><!-- END NO PRINT --> 사이의 모든 것을 대체 할 수있다?

다음 코드는 제대로 작동하지만 두 개 이상의 인스턴스가있을 때마다 잘못됩니다.

그런 다음 첫 번째 태그와 마지막 태그 사이의 모든 것을 바꿉니다. 그러나 그것은 함께 속한 두 개의 태그 사이의 모든 것을 제거해야합니다. 내 코드입니다.

$pageData['raw_content'] = preg_replace('/<!--[ ]*START[ ]*NO[ ]*PRINT[ ]*-->(.*)<!--[ ]*END[ ]*NO[ ]*PRINT[ ]*-->/si', '', $pageData['raw_content']); 
+0

[PHP로 두 점 사이에 문자열 삽입] (http://stackoverflow.com/questions/3355213/insert-string-between-two-points-with-php); 또는 [PHP 사이에 태그 바꾸기] (http://stackoverflow.com/questions/4465620/php-replace-between-tags) 또는 다른 많은 중복. – hakre

답변

9

당신은 탐욕 스럽습니다.

'/<!--[ ]*START[ ]*NO[ ]*PRINT[ ]*-->(.*?)<!--[ ]*END[ ]*NO[ ]*PRINT[ ]*-->/si' 

공지 사항 .*.*?되고있다 :

당신은 non-greedy modifier이 필요합니다.

+0

때로는 지연 수정 자라고합니다. 맞습니까? – BlackVegetable

+1

@BlackVegetable : 예 :-) –

+0

그냥'/ print \ - \ - \> ([. \ w \ W] *?) \ <\! \ - \ end/ui' – HanhNghien