Dostaję $row['message']
z bazy danych MySQL i muszę usunąć wszystkie białe znaki jak \n
\t
i tak dalej.
$row['message'] = "This is a Text \n and so on \t Text text.";
powinien być sformatowany do:
$row['message'] = 'This is a Text and so on Text text.';
Próbowałem:
$ro = preg_replace('/\s\s+/', ' ',$row['message']);
echo $ro;
ale nie usuwa \n
ani \t
tylko pojedynczych spacji. Czy ktoś może mi powiedzieć, jak to zrobić?
php
regex
string
preg-replace
whitespace
creativz
źródło
źródło
Odpowiedzi:
Potrzebujesz:
Używasz
\s\s+
co oznacza białe spacje (spację, tabulator lub znak nowej linii), po których następuje jedna lub więcej białych spacji. Co skutecznie oznacza zastąpienie dwóch lub więcej białych znaków pojedynczą spacją.To, czego chcesz, to zastąpić jedną lub więcej białych spacji pojedynczą białą spacją, abyś mógł użyć wzoru
\s\s*
lub\s+
(zalecane)źródło
\s
nie ma „pionowej zakładki”chr(11)
. Aby go również dołączyć, musisz użyćspace
klasy postaci:[[:space:]]+
php.net/manual/en/regexp.reference.character-classes.phpTo wychodzi
źródło
\s
zawiera już tabulatory i nowe wiersze, więc powyższe wyrażenie regularne wydaje się wystarczające.źródło
/m
efektu, ponieważ nie ma żadnych^
lub$
zakotwiczeń, a/u
nie przyniesie żadnego efektu poza nieznacznym spowolnieniem i zgonem, jeśli łańcuch wejściowy nie jest prawidłowy UTF-8 (nie wpływa na to\s
, które dopasowania, ale wpłynie na\pZ
).uproszczony do jednej funkcji:
na podstawie odpowiedzi Danuela O'Neala.
źródło
źródło
Nie mogę odtworzyć problemu tutaj:
Nie jestem pewien, czy był to tylko błąd transkrypcji, czy nie, ale w twoim przykładzie używasz ciągu pojedynczego cudzysłowu.
\n
i\t
są traktowane jako nowa linia i tabulator tylko wtedy, gdy masz ciąg cudzysłowu. To jest:Edycja : jak wskazał Codaddict,
\s\s+
nie zastąpi znaku pojedynczej karty. Nadal nie sądzę, aby używanie\s+
było wydajnym rozwiązaniem, więc co powiesz na to:źródło
Zastępuje to wszystkie tabulatory, wszystkie znaki nowej linii i wszystkie kombinacje wielu spacji, tabulatorów i znaków nowej linii pojedynczą spacją.
źródło
źródło
Bez preg_replace ()
źródło
Używam tego kodu i wzoru:
Możesz to przetestować na http://writecodeonline.com/php/
źródło
SELECT search_able, REGEXP_REPLACE (search_able,"\\s+",' ') FROM book where id =260
Więc wielkie dziękiWystarczy uruchomić go w następujący sposób:
źródło
Chciałbym użyć tego:
za. Pamiętaj, aby używać podwójnych cudzysłowów, na przykład:
b. Aby usunąć dodatkowe białe znaki, użyj:
To może nie być najszybsze rozwiązanie, ale myślę, że będzie wymagało najmniejszego kodu i powinno działać. Jednak nigdy nie korzystałem z mysql, więc mogę się mylić.
źródło
Prawdę mówiąc, jeśli uważasz, że chcesz czegoś takiego:
źródło
spowoduje to zastąpienie wielu kart jedną kartą
źródło
Bez preg_replace, za pomocą pętli.
źródło