여러 사건을 PHP의 preg_replace로 교체하기위한 올바른 구문
-
18-09-2019 - |
문제
나는 비슷한 아이디어로 Stack Overflow에서 다른 질문을 살펴 보았지만 내가하려는 것과 밀접한 관련이없는 것 같습니다.
단순 해 보이지만 나는 피클에 있습니다. 여러 번의 라인 브레이크를 교체하려고합니다 (\n
) 라인이 한 줄만 보이면 사람들은 한 번에 한 번 이상의 라인 브레이크를 제출할 수 없습니다. 내가 시도한 것은 다음과 같습니다.
$text = "Foo\n\n\nbar!\n\nfoobar!";
$text = preg_replace("#\n+#", "\n", $text);
echo $text;
예상 반환 된 진술은 다음과 같습니다.
Foo\nbar!\nfoobar!
하지만 시가는 없어! 나는 몇 가지를 시도했지만 아무도 작동하지 않는 것 같았습니다.
내가 뭘 잘못하고 있죠?
감사!
해결책 3
솔루션에만 관심이 있으시면 마지막 줄로 건너 뜁니다.
여기에 무슨 일이 일어 났는지 여기에 있습니다. 나는 가졌다 div
특정 정보가 포함 된 HTML의 태그. 사용자가 버튼을 누르면 JS 코드가 실행되는 실행됩니다. div
an input
TextBox, 해당 TextBox의 값을 원래 DIV의 HTML로 설정하면서 모든 발생을 대체합니다. <br>
~와 함께 \n
실제 라인 브레이크를 만들려면. 그런 다음 양식은 Ajax를 통해 서버에 제출되었습니다.
PHP에서 라인 브레이크를 교체하려고 할 때, 위의 제안 중 어느 것도 "실제"라인 브레이크 캐릭터가 아니기 때문에 단순한 이유 때문에 도움이되지 않았습니다. 서버에 제출 된 것은 문자 그대로였습니다 \n
. 당신은 백 슬래시를 탈출한다고 생각할 것입니다 \n
, Ghostdog74가 제안한대로 문제를 해결할 수는 있지만 그렇지 않았습니다. 나는 몇 가지 다른 방법을 피하려고 시도했지만 아무것도 도움이되지 않는 것 같았습니다.
나는 오래된 동정인 자료를 언급하고 다음을 발견했습니다.
많은 풍미가 또한 q ... e 탈출 시퀀스를 지원합니다. q와 e 사이의 모든 문자는 문자 문자로 해석됩니다. 예 : q* d+* e는 문자 그대로의 텍스트와 일치합니다. d+. e는 Regex의 끝에서 생략 될 수 있습니다 ...이 구문은 Jgsoft Engine, Perl, Pcre ... 원천
그 후, 여기 내 문제를 해결 한 코드가 있습니다.
$text = preg_replace('#[\Q\n\E]+#', "\n", $text);
모든 도움에 감사드립니다! 모두를위한 +1 :)
다른 팁
또한 세 가지 종류의 라인 브레이크를 모두 확인할 수도 있습니다.
$text = "Foo\n\r\n\n\rbar!\n\nfoobar!";
$text = preg_replace('#(\r\n|\r|\n)+#m', "\n", $text);
echo $text;
$text = "Foo\n\n\nbar!\n\nfoobar!";
$s = split("\n+",$text);
print_r( implode("\n",$s)); #this will join the string with newline
print_r( implode("\\n",$s)); # this will have literal \n in your string