我正在寻找Perl中的函数,删除0x20以下的所有前导和尾随字符,就像在Java中一样.
在以下字符串上调用函数后.
my $string = "\N{U+0020}\N{U+001f}\N{U+001e}\N{U+001d}\N{U+001c}\N{U+001b}\N{U+001a}\N{U+0019}\N{U+0018}\N{U+0017}\N{U+0016}\N{U+0015}\N{U+0014}\N{U+0013}\N{U+0012}\N{U+0011}Hello Moto\N{U+0010}\N{U+000f}\N{U+000e}\N{U+000d}\N{U+000c}\N{U+000b}\N{U+000a}\N{U+0009}\N{U+0008}\N{U+0007}\N{U+0006}\N{U+0005}\N{U+0004}\N{U+0003}\N{U+0002}\N{U+0001}\N{U+0000}";
Run Code Online (Sandbox Code Playgroud)
只剩下"Hello Moto".
String :: Util的修剪仅删除第一个空格(\ N {U + 0020}).
传统的ASCII方式是使用
$string =~ s/^\s+|\s+$//g;
Run Code Online (Sandbox Code Playgroud)
(即\s从字符串的开头(^)和结束($)中删除whitespace().
U + 001f不是空格,它是一个控件.您可以在正则表达式中使用Unicode属性\p:
my $drop = qr/[\p{Space}\p{Cc}]+/;
$whitespace =~ s/^$drop|$drop$//g;
Run Code Online (Sandbox Code Playgroud)
或者,更详细:
$drop = qr/[\p{White_Space}\p{Cntrl}]+/;
Run Code Online (Sandbox Code Playgroud)
您应该更改变量的名称.