Dre*_*ktz 2 perl split substitution lookahead lookbehind
使用split()分割字符串,并根据该字符串创建一个数组,以使单词和数字分开。
我知道前瞻和后瞻需要用于零宽度拆分,因此我使用了它。
$string = 'A1BB22CCC333DDDD';
@string = split(/(?=\d+)|(?<=\d+)/,$string);
print "@string";
Run Code Online (Sandbox Code Playgroud)
期望:
A 1 BB 22 CCC 333 DDDD
Run Code Online (Sandbox Code Playgroud)
但是结果:
在jdoodle.pl第2行的regex m /(?= \ d +)|(?<= \ d +)/中未实现可变长度后向。
命令以非零状态255退出。
您可以使用类似/(\d+)/拆分字符串的模式。
该模式包含一个捕获组;如perldoc split中所述:
如果PATTERN包含捕获组,则对于每个分隔符,将为由组捕获的每个子字符串生成一个附加字段(按照反向引用,以指定组的顺序);
考虑:
use strict;
use warnings;
my $string = "A1BB22CCC333DDDD";
my @result = split /(\d+)/, $string;
print "$_\n" for @result;
Run Code Online (Sandbox Code Playgroud)
产量:
A
1
BB
22
CCC
333
DDDD
Run Code Online (Sandbox Code Playgroud)
如果字符串确实以数字开头,则上述解决方案将返回前导空元素。为避免这种情况,可以按如下所示修改表达式:
my @result = grep length, split /(\d+)/, $string;
Run Code Online (Sandbox Code Playgroud)