Saya mendapatkan $row['message']
dari database MySQL dan saya harus menghapus semua spasi putih seperti \n
\t
dan sebagainya.
$row['message'] = "This is a Text \n and so on \t Text text.";
harus diformat ke:
$row['message'] = 'This is a Text and so on Text text.';
Saya mencoba:
$ro = preg_replace('/\s\s+/', ' ',$row['message']);
echo $ro;
tetapi tidak menghapus \n
atau \t
, hanya spasi tunggal. Adakah yang bisa memberi tahu saya cara melakukannya?
php
regex
string
preg-replace
whitespace
creativz
sumber
sumber
Jawaban:
Anda membutuhkan:
Anda menggunakan
\s\s+
yang berarti spasi putih (spasi, tab atau baris baru) diikuti oleh satu atau lebih spasi putih. Yang secara efektif berarti mengganti dua atau lebih spasi putih dengan satu ruang.Apa yang Anda inginkan adalah mengganti satu atau lebih spasi putih dengan spasi tunggal, sehingga Anda dapat menggunakan pola
\s\s*
atau\s+
(disarankan)sumber
\s
tidak termasuk "tab vertikal"chr(11)
. Untuk memasukkannya juga, Anda perlu menggunakanspace
kelas karakter:[[:space:]]+
php.net/manual/en/regexp.reference.character-classes.phpIni output
sumber
\s
sudah berisi tab dan baris baru, jadi regex di atas ini tampaknya sudah cukup.sumber
/m
akan memiliki efek karena tidak ada^
atau$
jangkar dan/u
tidak akan memiliki efek apa pun kecuali memperlambatnya sedikit dan mati jika string input tidak valid UTF-8 (tidak mempengaruhi apa yang\s
cocok, tetapi itu akan mempengaruhi\pZ
).disederhanakan menjadi satu fungsi:
berdasarkan jawaban Danuel O'Neal.
sumber
sumber
Saya tidak bisa meniru masalah di sini:
Saya tidak yakin apakah itu hanya kesalahan transkripsi atau tidak, tetapi dalam contoh Anda, Anda menggunakan string yang dikutip tunggal.
\n
dan\t
hanya diperlakukan sebagai baris dan tab baru jika Anda memiliki string yang dikutip ganda. Itu adalah:Sunting : seperti yang ditunjukkan Codaddict,
\s\s+
tidak akan mengganti karakter tab tunggal. Saya masih tidak berpikir menggunakan\s+
adalah solusi yang efisien, jadi bagaimana dengan ini sebagai gantinya:sumber
Ini menggantikan semua tab, semua baris baru dan semua kombinasi beberapa ruang, tab dan baris baru dengan satu ruang.
sumber
sumber
Tanpa preg_replace ()
sumber
Saya menggunakan kode dan pola ini:
Anda dapat menguji ini di http://writecodeonline.com/php/
sumber
SELECT search_able, REGEXP_REPLACE (search_able,"\\s+",' ') FROM book where id =260
Jadi Terima kasih banyakYang Anda butuhkan adalah menjalankannya sebagai berikut:
sumber
Inilah yang akan saya gunakan:
Sebuah. Pastikan untuk menggunakan tanda kutip ganda, misalnya:
b. Untuk menghapus spasi kosong, gunakan:
Ini mungkin bukan solusi tercepat, tapi saya pikir itu akan memerlukan kode paling sedikit, dan itu harus bekerja. Saya belum pernah menggunakan mysql, jadi saya mungkin salah.
sumber
Sebenarnya, jika berpikir bahwa Anda menginginkan sesuatu seperti ini:
sumber
ini akan menggantikan banyak tab dengan satu tab
sumber
Tanpa preg_replace, dengan bantuan loop.
sumber