Estou recebendo $row['message']
de um banco de dados MySQL e preciso remover todos os espaços em branco, como \n
\t
assim por diante.
$row['message'] = "This is a Text \n and so on \t Text text.";
deve ser formatado para:
$row['message'] = 'This is a Text and so on Text text.';
Eu tentei:
$ro = preg_replace('/\s\s+/', ' ',$row['message']);
echo $ro;
mas não remove \n
ou \t
apenas espaços únicos. Alguém pode me dizer como fazer isso?
php
regex
string
preg-replace
whitespace
creativz
fonte
fonte
Respostas:
Você precisa:
Você está usando o
\s\s+
que significa espaço em branco (espaço, tabulação ou nova linha) seguido por um ou mais espaços em branco. O que significa efetivamente substituir dois ou mais espaços em branco por um único espaço.O que você deseja é substituir um ou mais espaços em branco por um único espaço em branco, para que você possa usar o padrão
\s\s*
ou\s+
(recomendado)fonte
\s
não inclui "aba vertical"chr(11)
. Para incluí-lo, você também precisa usarspace
classe de caracteres:[[:space:]]+
php.net/manual/en/regexp.reference.character-classes.phpIsso gera
fonte
\s
já contém guias e novas linhas, portanto, este regex acima parece ser suficiente.fonte
/m
não vai ter um efeito já que não existem^
ou$
âncoras e/u
não terá qualquer efeito, exceto para retardá-lo um pouco e morrer se a cadeia de entrada não é válido UTF-8 (que não afeta o que\s
corresponde, mas isso afetaria\pZ
)simplificado para uma função:
com base na resposta de Danuel O'Neal.
fonte
fonte
Não consigo replicar o problema aqui:
Não tenho certeza se foi apenas um erro de transcrição ou não, mas no seu exemplo, você está usando uma string de aspas simples.
\n
e\t
são tratados apenas como nova linha e guia se você tiver uma sequência de aspas duplas. Isso é:Edit : como Codaddict apontou,
\s\s+
não substituirá um único caractere de tabulação. Ainda não acho que o uso\s+
seja uma solução eficiente, então, que tal isso:fonte
Isso substitui todas as guias, todas as novas linhas e todas as combinações de vários espaços, guias e novas linhas por um único espaço.
fonte
fonte
Sem preg_replace ()
fonte
Eu uso este código e padrão:
Você pode testar isso em http://writecodeonline.com/php/
fonte
SELECT search_able, REGEXP_REPLACE (search_able,"\\s+",' ') FROM book where id =260
então muito obrigadoTudo o que você precisa é executá-lo da seguinte maneira:
fonte
Isto é o que eu usaria:
uma. Certifique-se de usar aspas duplas, por exemplo:
b. Para remover espaço em branco extra, use:
Pode não ser a solução mais rápida, mas acho que exigirá o mínimo de código e deve funcionar. Porém, nunca usei o mysql, por isso posso estar errado.
fonte
Na verdade, se você pensa que deseja algo assim:
fonte
isso substituirá várias guias por uma única guia
fonte
Sem preg_replace, com a ajuda do loop.
fonte