84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
我正在嘗試修剪諸如此字元之類的 unicode 空格,並且我能夠使用此解決方案來做到這一點。此解決方案的問題是它不會修剪普通字元之間的 unicode 空格。例如這個使用薄空間
$string = " test string "; echo preg_replace('/^[pZpC]+|[pZpC]+$/u', '', $string); // outputs: test string
我對正規表示式有一點了解,所以我不知道要改變我的表達式來解決這個問題
要刪除字串開頭和結尾處的所有帶有控製字元的 Unicode 空白,以及刪除字串內任何位置除常規空格之外的所有帶有控製字元的 Unicode 空白,您可以使用
preg_replace('/^[\pZ\pC]+|[\pZ\pC]+$|(?! )[\pZ\pC]/u', '', $string) // Or, simply preg_replace('/^\s+|\s+$|[^\S ]/u', '', $string)
請參閱正規表示式示範 #1 和正規表示式 示範 #2。
詳細資訊
^[\pZ\pC]
|
[\pZ\pC] $
(?! )[\pZ\pC]
[^\S ]
\x20
如果您還需要「排除」常見換行符,請將(?! )[\pZ\pC] 替換為(?![ \r\n])[ \pZ \pC] (由 @MonkeyZeus 建議) ,在第二個正規表示式中,這表示您需要使用[^\S \r\n]。
(?![ \r\n])[ \pZ \pC]
[^\S \r\n]
查看 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
這樣的 Unicode 空格 \u{2009} 如何在不同的地方造成問題。 因此,我會將所有 unicode 空格替換為常規空格,然後套用 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
注意:註解中字串的表示是用 debug::writeUni($string, $trimString); 來表示的。從此類實作。
要刪除字串開頭和結尾處的所有帶有控製字元的 Unicode 空白,以及刪除字串內任何位置除常規空格之外的所有帶有控製字元的 Unicode 空白,您可以使用
請參閱正規表示式示範 #1 和正規表示式 示範 #2。
詳細資訊
^[\pZ\pC]
- 字串開頭的一個或多個空格或控製字元|
- 或[\pZ\pC] $
- 字串末端的一個或多個空格或控製字元|
- 或(?! )[\pZ\pC]
- 字串內任意位置除常規空格之外的一個或多個空格或控製字元[^\S ]
- 常規空格 (\x20
) 以外的任何空格如果您還需要「排除」常見換行符,請將
(?! )[\pZ\pC]
替換為(?![ \r\n])[ \pZ \pC]
(由 @MonkeyZeus 建議) ,在第二個正規表示式中,這表示您需要使用[^\S \r\n]
。查看 PHP 示範:
這樣的 Unicode 空格 \u{2009} 如何在不同的地方造成問題。 因此,我會將所有 unicode 空格替換為常規空格,然後套用 trim()。
注意:註解中字串的表示是用 debug::writeUni($string, $trimString); 來表示的。從此類實作。