2014-10-20 4 views
0

사용자가 주석을 입력하는 텍스트 영역이 있고 nl2br을 사용하여 텍스트 블록 사이에 공백을 추가 할 수 있습니다. 3 개 이상의 br 태그가 한 행에 표시되고 하나의 태그로 모두 바뀌는 경우를 대체하고 싶습니다.Preg 여러 br 태그와 일치

하나 또는 두 개의 br 태그가 교체되지 않지만 더 이상 하나의 태그로 교체해야합니다.

이 내가 지금까지

$comment = preg_replace('/(<br \/>){3,}/', '<br />', $comment); 

$ 코멘트 변수가

one<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
two<br /> 
<br /> 
<br /> 
<br /> 
<br /> 
three<br /> 
<br /> 
four 

$comment = preg_replace('/(<br \/>)/', '-', $comment); 

하이픈으로 모든 BR 태그를 대체에 정규식 변화가 정규 표현식이다, 그래서 그것은 {3,}과 관련이있는 것처럼 보이지만 확실하지 않습니다.

+0

무엇이 잘못 되었나요? –

+0

작동하지 않는 것 같습니다. – user1869566

+0

은 주석 변수의 내용을 게시합니다. –

답변

2

다음 정규 표현식을 사용할 수 있습니다. 반복 태그는 같은 줄에 있거나 줄 바꿈 시퀀스로 구분 될 수 있으므로 공백을 고려해야합니다.

$comment = preg_replace('~(?:<br />\s*){3,}~', '<br />', $comment); 

Regex Explanation | Code Demo

어떤 논리적 인 이유를 위해 당신은 유지하려는 특정 공백을 제거하는 경우, 내가 사용하는 것입니다 ...

$comment = preg_replace('~(?:<br />\R?){3,}~', '<br />', $comment); 
+0

어쩌면 변경 사항에 * 이유 *를 추가하십시오. – dognose

+0

감사합니다. 이 작품. – user1869566

+0

일부 독서를 한 후에는 캡처 그룹에 속하는 비 캡처 그룹에 있어야합니다. 괄호의 시작 부분에? :를 추가하면 캡쳐되지 않은 그룹으로 바뀝니다. – user1869566

1

당신은 또한 아래 정규식을 시도 할 수,

(?:<br \/>\n?){3,} 

DEMO

옵션으로 마지막에 \n을 추가하면 선물 인 경우 개행 문자와도 일치합니다.

+0

고맙습니다. 이것은 또한 작동합니다. – user1869566

관련 문제