我想获得分裂字符。我尝试了以下编码,但我只能获得分割文本。但是,如果拆分字符相同,则应将其作为单个字符返回 例如,如果字符串是“asa,agas,asa”,那么应该返回。 所以在下面的例子中,我应该得到“|:;” (与空间相结合)
use strict;
use warnings;
my $str = "Welcome|a:g;v";
my @value = split /[,;:.%|]/, $str;
foreach my $final (@value) {
print $final, "\n";
}
答案 0 :(得分:2)
split
在给定分隔这些元素时将字符串拆分为元素,因此split
不是您想要的。相反,使用:
my @punctuations = $str =~ /([,;:.%|])/g;
答案 1 :(得分:0)
所以你想得到与分裂相反的
尝试:
my @value=split /[^,;:.%|]+/,$str;
它将拆分任何但您设置的分隔符。
通信后的更正:
my @value=split /[^,;:.%|]+/,$str;
shift @value;
答案 2 :(得分:0)
这很好用,并给出了独特的答案
@value = ();
foreach(split('',",;:.%|")) { push @value,$_ if $str=~/$_/; }
答案 3 :(得分:0)
要仅提取一次所有分隔符,您需要更精细的内容
my @punctuations = keys %{{ map { $_ => 1 } $str =~ /[,;:.%|]/g }};
答案 4 :(得分:0)
听起来你称之为“分裂字符”,我们其余人称之为“分隔符” - 如果是这样,POSIX字符类[:punct:]
可能会证明是有价值的。
OTOH,如果你有一个已定义的分隔符列表,而你想要做的就是列出字符串中的那些,那么使用m//
而不是split
会更有效率。