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
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
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
), dalam regex kedua ini bermakna anda perlu menggunakan(?! )[pZpC]
替换为(?![ rn])[ pZpC]
(由 @MonkeyZeus 建议) ,在第二个正则表达式中,这意味着您需要使用[^S rn]
dengan(?![ rn])[ pZpC]
(Disyorkan oleh @MonkeyZeus[^S rn]
.Lihat Demo PHP
: 🎜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().
Nota: Perwakilan rentetan dalam ulasan diwakili oleh nyahpepijat::writeUni($string, $trimString);. Dilaksanakan dari kelas ini.