我有以下方式的文字
@@+aaa+bbb+ccc-asd-asdfg+hhh
我需要将文本分成两个列表:
+
:'aaa', 'bbb', 'ccc', 'hhh'
-
:'asd', 'asdfg'
我$str = substr($str, 2);
删除了@@
。
答案 0 :(得分:2)
我会使用split在+
或-
上划分您的字符串,并将每个元素存储在数组中:
#!/usr/bin/perl
use warnings;
use strict;
use feature qw/ say /;
my $text = '@@+aaa+bbb+ccc-asd-asdfg+hhh';
my @words = split(/[+-], $text);
shift @words if $words[0] =~ /^@/;
say for @words;
答案 1 :(得分:2)
在-
和+
之后,您可以使用2个正则表达式获取-
和+
以外的所有字符:
#!/usr/bin/perl
use warnings;
use feature 'say';
my $text = "@@+aaa+bbb+ccc-asd-asdfg+hhh";
my @lstplus = $text =~ /\+\K[^+-]+/g;
my @lstminus = $text =~ /-\K[^+-]+/g;
此处,\+
匹配文字+
,-
匹配文字-
,然后\K
会在匹配项中忽略此符号,[^+-]+
}匹配并返回除-
和+
以外的1 + 3个字符块。