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); 来表示的。从此类实现。