2009-12-01 2 views
0

(PHP에서 ...) 나는 텍스트 블록을 취하여 모든 굵은 줄 바꿈을 제거하려고하므로 꺾쇠 괄호를 사용하여 특정 줄 길이로 다시 감쌀 수 있습니다.).개행을 바로 뒤따라 개행하지 않음

그러나 여러 단락을 사용할 수 있으므로 단일 줄 바꿈을 제거하는 방법이 필요하지만 두 줄을 제거하지 않아야합니다.

그렇다면 \ n \ n은 아니지만 정규식에서 find \ n을 어떻게 말 할 수 있습니까? 아니면 내가 잘못된 방향으로 접근하고 있습니까?

+0

오래된 진부함을 없애려면 : 이제 두 가지 문제가 있습니다. ;) 정확한 해결책은 –

답변

2

시도 :

preg_replace('!(?<!\n)\n(?!\n)!', '', $input); 

이 어떻게 작동하는지에 대한 Lookahead and Lookbehind Zero-Width Assertions를 참조하십시오.

줄 바꿈이 없거나 뒤에 오는 줄 바꿈을 제거합니다. 다음

This is some text\n\n 

첫 번째가 줄 바꿈하지만 두 번째 뜻에 따른다로 (줄 바꿈은 줄 바꿈 다음되지 않음) 일치하지 않습니다가 다음되지 않기 때문에 : 당신은 당신이 콤보를, 그렇지 않으면 모두해야 줄 바꿈 (하지만 그 앞에 하나)이 있습니다.

은 또한 당신은 할 수 :

preg_replace_callback('!\n+!', 'replace_newline', $input); 

function replace_newline($matches) { 
    return strlen($matches[0]) == 1 ? '' : $matches[0]; 
} 

또한 당신이 단지뿐만 아니라 연구를 \ 줄 바꿈을 의미하지 않으며 가정했습니다. 두 솔루션 중 하나를 조정할 수 있습니다.

+0

+1입니다. –

+0

HTML 텍스트 영역에서 텍스트가 입력 된 이후로 \ r \ n 처리하도록 수정되었습니다. 고마워. – Erik

0

이것이 최선의 해결책인지 확신 할 수 없지만 먼저 \ n \ n을 찾으려면 정규식을 사용할 수 없습니다 (예 : <br>). 그런 다음 \ n을 찾으십니까?

+0

텍스트에
도 포함되면 오류가 발생합니다. –

+0

아, 좋은 전화 마크. 미안하지만, 나는 그것을 명시 적으로 사용하는 것이 아니라 그들이 선호하는 것을 삽입하는 것을 의미한다. 멋지다. – malonso

1

내가 볼 당신은 이미 대답을 허용했지만 나는이 밖으로 던져 줄 알았는데 :

preg_replace("|\n{1}|", ""); 

을이 기본적으로 "공백"1 만 1 새로운 라인 "의 모든 인스턴스를 대체 할 '말한다 ".

나는 이것을 시도하지 않았으므로 더 추측입니다. 그러나 분과 함께 "제한"은 절대적으로 일치해야합니다.

관련 문제