2012-05-28 1 views
0

메일 헤더를 구문 분석하고 있는데 "경계 = ..."매개 변수를 찾고 있습니다.preg_match 문제 (예상대로 구문 분석하지 않음)

$content = '..Content-Type: multipart/alternative; 
    boundary="----=_NextPart_000_10CD_01CD3CB2.7C22E7C0" 
X-Mailer: Microsoft CDO for Windows 2000..' 

나는 다음을 사용하고 있지만, 그들 중 누구도 작동하지 않습니다 :

$boundary = preg_replace('#(.*)boundary="(.*)"(.*)#is',"$2",$content); 

    $boundary = preg_replace('#boundary="(.*)"#i',"$2",$content); 

첫 번째 줄은 반환

Content-Type: multipart/alternative; 
    ----=_NextPart_000_10CD_01CD3CB2.7C22E7C0 
X-Mailer: Microsoft CDO for Windows 2000 
:

NextPart_000_10CD_01CD3CB2.7C22E7C0" 
X-Mailer: Microsoft CDO for Windows 2000 

두 번째 동안

두 번째 줄의 내용을 이해하고 있습니다. 올바르게해라. 그러나 첫 번째 줄이 두 번째 큰 따옴표를 구문 분석하지 않는 동안 나는 얻지 못합니다. 어떤 생각?

+0

정확히 무엇을하고 싶습니까? preg_match를 사용하여 일치 시키거나 preg_replace를 사용하여 바꾸시겠습니까? 섞어 버릴거야. – Jeroen

+0

나는 그것을 바꾸기 위해 실제로 사용하지 않고 일치하는 대신 나는 추측한다 – capsula

+0

당신의 질문은 내가 정말로 preg_match, 나의 나쁜 것을 사용해야한다는 것을 깨달았다. preg_match ('# boundary = "(. *)"# i', $ content, $ m); – capsula

답변

0

마침내

$boundary = preg_replace('#(.*)boundary="([^"]*)(.*)#is',"$2",$content); 

그러나 사람이 내 질문에 대한 답을 알고 있다면 여전히, 그것은 감사하겠습니다

. 나는 완전히의 행동을 이해하지 못하는 부정적인 정규 [^ "] *를 사용하여 해결할 수 s modifi와 함께 사용하면,

.* : (. *) 자기 응답에서 질문에 대한 응답의 수정

1
preg_match('/boundary="([^"]+)"/m', $content, $m); 
echo $m[1]; // ----=_NextPart_000_10CD_01CD3CB2.7C22E7C0 
0

을 함께 사용 또한, 개행 문자 iirc를 포함합니다.

http://us3.php.net/manual/en/reference.pcre.pattern.modifiers.php

S (PCRE_DOTALL)이 변경자를 지정하면

는 패턴의 점 메타 개행 문자를 포함한 모든 문자가 일치한다. 그것이 없으면 줄 바꿈이 제외됩니다. 이 수정자는 Perl의/s 수정 자와 동일합니다. [^ a]와 같은 음수 클래스는이 한정자의 설정과 관계없이 항상 개행 문자와 일치합니다.