$string = "
put returns between paragraphs
for linebreak add 2 spaces at end
";
Deseja remover todas as novas linhas da string.
Eu tenho esse regex, ele pode pegar todos eles, o problema é que eu não sei com qual função devo usá-lo.
/\r\n|\r|\n/
$string
Deve se tornar:
$string = "put returns between paragraphs for linebreak add 2 spaces at end ";
preg_replace
. É quase duas vezes mais lento questr_replace
.s($str)->normalizeLineEndings('')
útil, conforme encontrado nesta biblioteca autônoma . Ele removerá não apenas LF, CR e CRLF, mas também qualquer nova linha Unicode.Respostas:
Você deve ter cuidado com quebras de linha duplas, o que causaria espaços duplos. Use esta expressão regular realmente eficiente:
Vários espaços e novas linhas são substituídos por um único espaço.
Editar: como outros já apontaram, esta solução apresenta problemas que correspondem a novas linhas únicas entre as palavras. Isso não está presente no exemplo, mas é possível ver facilmente como essa situação pode ocorrer. Uma alternativa é fazer o seguinte:
fonte
/(?![ ])\s+/
Alguns comentários sobre a resposta aceita:
Os
+
meios "1 ou mais". Eu não acho que você precise repetir\s
. Eu acho que você pode simplesmente escrever'/\s+/'
.Além disso, se você deseja remover os espaços em branco primeiro e último na cadeia, adicione
trim
.Com essas modificações, o código seria:
fonte
/\s\s+/
falharia em corresponder ao avanço de linhafoo\nbar
.Apenas use
preg_replace()
Você pode se safar
str_replace()
dessa, embora o código não pareça tão limpo:Veja ao vivo em ideone
fonte
$string = preg_replace("~[\r\n]~", "",$string);
fonte
\r
personagensVocê deve usar str_replace por sua velocidade e usar aspas duplas com uma matriz
fonte
\n
e,\r\n
além disso, acho que o OP está pedindo para colocar um único espaço no lugar de novas linhasNão tenho certeza se isso tem algum valor em relação às respostas já enviadas, mas posso postá-lo.
fonte
As substituições de regex PCRE podem ser feitas usando preg_replace: http://php.net/manual/en/function.preg-replace.php
Substituiria nova linha ou retornaria caracteres por um espaço. Se você não deseja que nada os substitua, altere o segundo argumento para
''
.fonte
preg
funções usam expressões regulares PCRE, não POSIX. Existemereg
funções que usam POSIX, mas agora estão obsoletas.Usa isto:
substitua séries de novas linhas por uma sequência vazia:
ou você provavelmente deseja substituir novas linhas por um único espaço:
fonte
\\n
parece terrível.\\\\
combinar uma única barra invertida é simplesmente horrível.A sequência de escape
\R
corresponde a uma nova linha genéricaRegex101 Demo
fonte
As quebras de linha no texto são geralmente representadas como:
\ r \ n - em um computador com Windows
\ r - em um computador Apple
\ n - no Linux
fonte
Sobre o quê:
Esta deve ser uma solução bastante robusta, porque \ n não funciona corretamente em todos os sistemas se não estiver errado ...
fonte
Fiquei surpreso ao ver quão pouco todo mundo sabe sobre regex.
As novas linhas de tira em php são
Em perl
O significado substitui qualquer caractere de nova linha no final da linha (por eficiência) - opcionalmente precedido por um retorno de carro - por um espaço.
\ n ou \ 015 é nova linha. \ r ou \ 012 é retorno de carro. ? em regex significa corresponder 1 ou zero do caractere anterior. $ em regex significa que corresponde ao final da linha.
A referência original e melhor do regex é perldoc perlre, todo codificador deve conhecer este documento muito bem: http://perldoc.perl.org/perlre.html Observe que nem todos os recursos são suportados por todos os idiomas.
fonte
este é o padrão que eu usaria
fonte
talvez isso funcione:
fonte
Este também remove guias
fonte
Você pode tentar abaixo o código preservará qualquer espaço em branco e novas linhas no seu texto.
fonte
Muitas dessas soluções não funcionaram para mim. Isso fez o truque: -
Aqui está a referência: - PCRE e Novas Linhas
fonte
este código abaixo funciona todo o texto, use-o:
fonte
Você pode remover nova linha e vários espaços em branco.
fonte