2009-05-03 4 views
11

PHP로 single serving site을 개발 중입니다. 단순히 방문객이 게시 한 메시지 (이상적으로 웹 사이트의 주제를 둘러싸고있는 메시지) 만 표시합니다. 누구나 한 시간에 최대 3 개의 메시지를 게시 할 수 있습니다.일반 표현식으로 중복 줄 바꿈 제거하기

웹 사이트는 하나의 페이지 일 뿐이므로 각 메시지의 세로 길이를 제어하고 싶습니다. 그러나 원본 메시지의 줄 바꿈을 부분적으로 유지하려고합니다. 두 줄 바꿈을 허용하는 것이 타협이지만 두 줄 이상인 경우 한 줄에 총 두 줄 바꿈으로 바꿉니다. 스택 오버플로가이를 구현합니다. 예를 들어

". 고슴도치 \ 레즈의 \ n \ n \ n \의 nporcupiney"

로 변경 될 것 "고슴도치 < BR /> < BR /> < BR /> porcupiney입니다."

줄 바꿈을 검사하는 까다로운 측면 중 하나는 수집되어 \ r \ n, \ r 또는 \ n으로 저장 될 가능성이 있습니다. 모든 줄 바꿈을 nl2br()을 사용하여 < br /> s로 변환하는 방법에 대해 생각했지만 불필요한 것으로 보였습니다.

내 질문 : preg_match() 및 preg_replace()와 같은 함수를 사용하여 PHP에서 정규 표현식을 사용하면 행에 두 개 이상의 줄 바꿈 (인스턴스 사이에 공백이 있거나 없음)의 인스턴스가 있는지 확인할 수 있습니다. 총 2 줄의 줄 바꿈으로 바꿉니 까? 작동해야

preg_replace('/(\r|\n|\r\n){2,}/', '<br/><br/>', $text); 

같은

답변

30
preg_replace('/(?:(?:\r\n|\r|\n)\s*){2}/s', "\n\n", $text) 
+0

혼란에 감사드립니다! 그건 정확히 원하는대로 작동합니다. 귀하의 원래 응답도 효과가있었습니다. – tevan

+0

원래 응답이 '사이에 공백을 둘 수 있는지 여부'를 충족하지 못했습니다. :) – chaos

+0

하지만 줄 바꿈이 하나만있을 때 두 줄로 바뀝니 까? 그대로 한 번 쉬어야할까요? – NonCoder

6

뭔가, 나는 생각한다. PHP 구문을 정확히 기억하지 못하더라도 더 이상 벗어날 필요가 있습니다. -/

+0

David 님 감사합니다. 게시 한 정규 표현식에서 볼 수있는 유일한 문제는 줄 바꿈 사이에 공백을 넣지 않는다는 것입니다. – tevan

+0

아, 사실 ... 당신의 질문에서 줄 바꿈 사이의 공백을 언급 한 부분을 놓쳤습니다. –