我有一个由几个单词组成的字符串(由大写字母分隔).
例如:
$string1="TestWater"; # to be splited in an array @string1=("Test","Water")
$string2="TodayIsNiceDay"; # as @string2=("Today","Is","Nice","Day")
$string3="EODIsAlwaysGood"; # as @string3=("EOD","Is","Always","Good")
Run Code Online (Sandbox Code Playgroud)
我知道Perl容易拆分使用split函数作为固定字符,或者匹配正则表达式可以将$ 1,$ 2与固定数量的变量分开.但是如何动态完成呢?提前致谢!
那个帖子Spliting CamelCase没有回答我的问题,我的问题更多地与Perl中的正则表达式相关,那个是在Java中(差异在这里适用).
使用split在正则表达式上拆分字符串.你想要的是一个大写字符,后面没有一个大写字符作为边界,可以用两个前瞻断言表示(详见perlre):
#!/usr/bin/perl
use warnings;
use strict;
use Test::More;
sub split_on_capital {
my ($string) = @_;
return [ split /(?=[[:upper:]](?![[:upper:]]))/, $string ]
}
is_deeply split_on_capital('TestWater'), [ 'Test', 'Water' ];
is_deeply split_on_capital('TodayIsNiceDay'), [ 'Today', 'Is', 'Nice', 'Day' ];
is_deeply split_on_capital('EODIsAlwaysGood'), [ 'EOD', 'Is', 'Always', 'Good' ];
done_testing();
Run Code Online (Sandbox Code Playgroud)