Perl正则表达式逐字拆分

del*_*air 0 regex perl

我有一个由几个单词组成的字符串(由大写字母分隔).

例如:

$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中(差异在这里适用).

cho*_*oba 7

使用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)

  • @melpomene:在[split](http://p3rl.org/split)中记录:EXPR开头的零宽度匹配从不产生空字段 (2认同)