2010-02-10 7 views
14

나는이게 사소한 것이라고 확신하지만 피사체가 여러 줄로 구성되어 있다는 것을 고려한 정규식을 만들 수 없습니다. 하나의 "m"수정자가 작동하지 않는 것 같습니다.PHP preg_replace 여러 줄과 일치하는 preg_replace

+0

당신은 정규식이 맞다고 긍정적입니까? – Romain

+0

msU 자세한 내용은 아래 링크를 참조하십시오. http://zendf.wordpress.com/2012/02/08/php-preg_match-multi-line-match/ – Tofeeq

답변

7

수정자를 사용해 보셨습니까? 의미는 '한 줄처럼 취급하십시오. 'm'은^및 $ 행의 시작과 끝을 사용할 수있게합니다.

+0

아 IC는 내일 일하게 될 것입니다. 한 가지 더 질문하지만 줄 바꿈, 공백 또는 탭과 어떻게 일치합니까? 지금까지 나는 "[\\ n \\ t] *"을 생각해 냈습니다. 맞습니까? –

+0

그냥'\ s'를 사용하십시오. 이는 스페이스 문자를 의미합니다. –

+0

\ s는 '공백'(\ t 및 공백을 의미)과 일치하며 's'와 함께 사용하면 \ n도 포함될 수 있다고 생각합니다. – ziya

45

Maxwell Troy Milton King이 맞습니다. 그러나 그의 답변이 조금 짧기 때문에, 나는 이것을 게시하고 설명 할 몇 가지 예를 제공 할 것입니다.

기본적으로 . 메타 문자는 줄 바꿈과 일치하지 않습니다. 이것은 PHP의 맛을 포함한 많은 정규식 구현에 해당됩니다. 즉, 텍스트를 가지고 말했다

'/.*/' 

$text = "Line 1\nLine 2\nLine 3"; 

및 정규식

다음 정규식은 Line 1 일치합니다. 자신에 대한 참조하십시오 .* 이후 \n (새 라인 문자)에 "매칭을 중지"

preg_match('/.*/', $text, $match); 
echo $match[0]; // echos: 'Line 1' 

. 제 m 수정 (멀티 라인)에 대한 지금

preg_match('/.*/s', $text, $match); 
echo $match[0]; // echos: 'Line 1\nLine 2\nLine 3' 

: 당신은 당신의 정규식의 끝에서 S-수정 (일명 DOT-ALL 수정)를 추가, 라인뿐만 아니라 휴식과 일치하도록하려면 : ^은 입력 문자열의 시작뿐만 아니라 각 행의 시작과 일치하게합니다. $과 동일 : $이 입력 문자열의 끝뿐 아니라 각 줄의 끝과 일치하게합니다.

예 :

$text = "Line 1\nLine 2\nLine 3"; 
preg_match_all('/[0-9]$/', $text, $matches); 
print_r($matches); 

만 3 (입력의 끝)에 일치한다. 그러나 :

하지만 m-개질제 활성화 :

$text = "Line 1\nLine 2\nLine 3"; 
preg_match_all('/[0-9]$/m', $text, $matches); 
print_r($matches); 

전체 (인) 각 디지트 라인의 끝에서를 ('1', '2'및 '3')가 일치한다.

+3

+1 환상적인 답변 – blak3r