尝试/失败分割为 2 个不同的字符,但也不在空间上。
#!/usr/bin/env perl
use strict;
my $line = "-abc=123 +def=456 -ghi 789";
my @arr = split(/([+-]\S+)/,$line);
foreach my $elem (@arr) {
print "<${elem}>\n"; # '<' and '>' added to show where spaces are
}
exit;
这会产生...
<>
<-abc=123>
< >
<+def=456>
< >
<-ghi>
< 789>
我想要...
<-abc=123 >
<+def=456 >
<-ghi 789 >
(或者最好没有那些尾随空格,但很容易修剪)
它似乎想要在空间上进行分割,即使它不在正则表达式中。 我想我可以强力执行此操作,遍历数组并删除只是空格的元素。但希望有更优雅的东西!
将您的代码更改为类似这样的内容
#!/usr/bin/env perl
use strict;
my $line = "-abc=123 +def=456 -ghi 789";
my @arr = split(/([+-]\S+\s*\S*)/, $line);
foreach my $elem (@arr) {
next unless $elem =~ /\S/; # Skip empty elements
print "<${elem}>\n";
}
exit;
新的正则表达式
([+-]\S+\s*\S*)
捕获一个加号或减号,后跟一个或多个非空白字符 (\S+)
,后跟可选空白 (\s*)
,然后是更多非空白字符 (\S*)