2012-02-18 2 views
1

다음 코드는 HTML 및 PHP 파일에서 주석, 줄 바꿈 및 추가 공간을 제거하지만 원본 파일에 <<<EOT;이있는 경우 문제가 발생합니다. <<<EOT; 전후에 줄 바꿈을 추가 할 때 사용하는 정규식 규칙은 $pre6입니까?문자열 앞뒤에 줄 바꿈을 추가하는 정규식?

//a bit messy, but this is the core of the program. removes whitespaces, line breaks, and comments. sometimes makes EOT error. 
$pre1 = preg_replace('#<!--[^\[<>].*?(?<!!)-->#s', '', preg_replace('~>\s+<~', '><', trim(preg_replace('/\s\s+/', ' ', php_strip_whitespace(stripslashes(htmlspecialchars($uploadfile))))))); 
$pre2 = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $pre1); 
$pre3 = str_replace(array("\r\n", "\r"), "\n", $pre2); 
$pre4 = explode("\r\n", $pre3); 
$pre5 = array(); 
foreach ($pre4 as $i => $line) { 
    if(!empty($line)) 
     $pre5[] = trim($line); 
} 
$pre6 = implode($pre5); 
echo $pre6; 

답변

1

당신이 그 정확한 텍스트와 일치하는 방법을 엄격에 따라 <{3}[A-Z]{3}, 또는 여러 가지 다른 패턴을 사용할 수 있습니다, <<<EOT 일치합니다.

아, 네가 지금 무엇을하고 있는지 알 겠어. 필자는 PHP에서는별로 좋지 않지만 정규식에서는 명명 된 그룹을 캡처 한 다음 대체 작업에서 해당 그룹을 참조 할 수 있습니다. 그래서 어쩌면 당신은 대체 매개 변수 다음에있어

$regs['Capture'] 

: 나는 당신이 뭔가를 사용하여 참조 할 수 PHP에서 생각

(?<Capture><{3}[A-Z]{3}) 

: 당신은이 Capture라는 이름의 그룹으로 <<<EOT을 캡처하려면 다음을 사용할 수 있습니다 같은 값 : $regs이 교체 작업에 전달 된 매개 변수가 있다면

"\r\n".$regs['Capture']."\r\n" 

....

+0

감사합니다. 올바른 방향으로 넣어주세요. – ionFish

관련 문제