0

我想得到拆分字符。我尝试了以下编码,但我只能获取拆分后的文本。但是,如果拆分字符相同,则应将其作为单个字符返回。例如,如果字符串为“asa,agas,asa”,则应仅返回 , 。所以在下面的情况下,我应该得到“| : ;” (与空格连接)

use strict;
use warnings;

my $str = "Welcome|a:g;v";
my @value = split /[,;:.%|]/, $str;

foreach my $final (@value) {
    print $final, "\n";
}
4

5 回答 5

2

split当给定分隔这些元素的元素时,将字符串拆分为元素,因此split不是您想要的。相反,使用:

my @punctuations = $str =~ /([,;:.%|])/g;
于 2013-02-22T13:18:36.977 回答
0

所以你想得到分裂的反面

尝试:

my @value=split /[^,;:.%|]+/,$str;

除了您设置的分隔符之外,它将拆分任何内容。

commnets之后的更正:

my @value=split /[^,;:.%|]+/,$str;
shift @value;
于 2013-02-22T13:16:43.717 回答
0

这很好用,并给出了独特的答案

@value = ();
foreach(split('',",;:.%|")) { push @value,$_ if $str=~/$_/; }
于 2013-02-22T13:35:46.623 回答
0

要仅提取一次所有分隔符,您需要更精细的东西

my @punctuations = keys %{{ map { $_ => 1 } $str =~ /[,;:.%|]/g }};
于 2013-02-22T20:26:07.073 回答
0

听起来您将我们其他人称为“分隔符”的“拆分字符”称为“分隔符”——如果是这样,POSIX 字符类[:punct:]可能会被证明是有价值的。

OTOH,如果您有一个已定义的分隔符列表,并且您要做的就是列出字符串中存在的分隔符,那么使用m//它比使用split.

于 2013-02-23T02:09:09.903 回答