Rumah > Soal Jawab > teks badan
Saya cuba memangkas ruang unicode seperti aksara ini dan saya dapat melakukannya menggunakan penyelesaian ini. Masalah dengan penyelesaian ini ialah ia tidak memangkas ruang unikod antara aksara biasa. Sebagai contoh, yang ini menggunakan ruang nipis
$string = " test string "; echo preg_replace('/^[pZpC]+|[pZpC]+$/u', '', $string); // outputs: test string
Saya tahu serba sedikit tentang ungkapan biasa, jadi saya tidak tahu apa yang perlu diubah ekspresi saya untuk menyelesaikan masalah ini
P粉5579579702023-11-14 00:59:08
Untuk mengalih keluar semua ruang putih Unicode dengan aksara kawalan pada permulaan dan akhir rentetan, dan untuk mengalih keluar semua ruang putih Unicode dengan aksara kawalan kecuali ruang putih biasa di mana-mana dalam rentetan, anda boleh menggunakan
preg_replace('/^[\pZ\pC]+|[\pZ\pC]+$|(?! )[\pZ\pC]/u', '', $string) // Or, simply preg_replace('/^\s+|\s+$|[^\S ]/u', '', $string)
Lihat Demo Ungkapan Biasa #1 dan Ungkapan Biasa Demo #2.
Butiran
^[pZpC]+
- satu atau lebih ruang atau aksara kawalan pada permulaan rentetan |
- atau [pZpC]+$
- satu atau lebih ruang atau aksara kawalan |
- atau (?! )[pZpC]
- Satu atau lebih ruang atau aksara kawalan di mana-mana dalam rentetan selain daripada ruang biasa [^S ]
- 除常规空格 (x20
)Jika anda juga perlu "mengecualikan" baris baharu biasa, gantikan (?! )[pZpC]
替换为 (?![ rn])[ pZpC]
(由 @MonkeyZeus 建议) ,在第二个正则表达式中,这意味着您需要使用 [^S rn]
dengan (?![ rn])[ pZpC]
(Disyorkan oleh @MonkeyZeus
[^S rn]
. Lihat Demo PHP
: 🎜echo preg_replace('~^[\pZ\pC]+|[\pZ\pC]+$|(?! )[\pZ\pC]~u', '', 'abc def ghi '); // => abc defghi echo preg_replace('/^\s+|\s+$|[^\S ]/u', '', 'abc def ghi '); // => abc defghi
P粉4457509422023-11-14 00:22:00
Bagaimana ruang Unikod seperti u{2009} boleh menyebabkan masalah di tempat yang berbeza. Jadi saya akan menggantikan semua ruang unicode dengan ruang biasa dan kemudian menggunakan trim().
$string = " test string and XY \t "; //\u{2009}\u{2009}\u{2009}test\u{2009}\u{2009}\u{2009}string\u{2009}and\x20XY\x20\x09\u{2009} $trimString = trim(preg_replace('/[\pZ\pC]/u', ' ', $string)); //test\x20\x20\x20string\x20and\x20XY
Nota: Perwakilan rentetan dalam ulasan diwakili oleh nyahpepijat::writeUni($string, $trimString);. Dilaksanakan dari kelas ini.