珀尔 | split()函数
split()是Perl中的一个字符串函数,用于拆分,或者您可以说将字符串切割成更小的部分或片段。拆分字符串有不同的标准,例如单个字符、正则表达式(模式)、一组字符或未定义的值等。此函数的最佳之处在于用户可以指定拆分字符串的多少个部分进入。
句法:
split /Pattern/, Expression, Limit
or
split /Pattern/, Expression
or
split /Pattern/
or
Split
在上面的语法中, Pattern被指定为一个正则表达式,它提供了分割字符串的标准。表达式是要拆分的字符串。 Limit是一种限制,它在字符串中找到的第 (n-1) 个模式处停止拆分。
返回值:此方法返回两个上下文中的值,如下所示:
In Array Context: Here it returns a list of the fields which found in Expression. If no Expression is specified then it returns $_.
In Scalar Context: Here it returns the number of fields which found in Expression and then stored the fields in the @_ array.
使用 split()函数有不同的方法,如下所示:
- 拆分字符
- 在没有限制的字符串之间拆分
- 在具有限制的字符串之间拆分
- 拆分未定义的值
- 拆分正则表达式(模式)
- 散列拆分
- 空间分割
拆分字符
用户可以用逗号(,)反斜杠(\)等不同的字符来拆分或拆分字符串。这种类型的拆分通常在您必须解析来自另一个程序或文件的数据时使用。不要使用 split() 来解析CSV(逗号分隔值)文件。如果您的数据中有逗号,请改用Text::CSV 。
例子:
# Perl program to demonstrate the splitting on character
#!/usr/bin/perl
use strict;
use warnings;
# Here character is comma(, )
my $str = 'Geeks, for, Geeks';
# using split() function
my @spl = split(', ', $str);
# displaying result using foreach loop
foreach my $i (@spl)
{
print "$i";
}
GeeksforGeeks
在没有任何限制的字符串之间拆分
这也与字符上的拆分相同。这里字符串的数据被两个分隔! .
例子:
# Perl program to demonstrate the
# splitting among string without Limit
#!/usr/bin/perl
use strict;
use warnings;
# string which is separated by !! sign
my $str = 'GFG!!Geeks!!55!!GeeksforGeeks';
# using split function without Limit
my @spl = split('!!', $str);
# displaying string after splitting
foreach my $i (@spl)
{
print "$i\n";
}
GFG
Geeks
55
GeeksforGeeks
使用限制拆分字符串
这也与字符上的拆分相同。这里字符串的数据被两个分隔! .在这里,用户可以通过在 split函数中传递第三个参数来限制字符串将分成的部分的数量,该参数将是一个正整数值。在下面的示例中,用户将Limit 传递为 3 ,因此它将限制将字符串拆分为 3,即使出现 4 次!!在字符串中。
例子:
# Perl program to demonstrate the
# splitting on string with Limit
#!/usr/bin/perl
use strict;
use warnings;
# string which is separated by !! sign
my $str = 'GFG!!Geeks!!55!!GeeksforGeeks';
# using split function with Limit
my @spl = split('!!', $str, 3);
# displaying string after splitting
foreach my $i (@spl)
{
print "$i\n";
}
GFG
Geeks
55!!GeeksforGeeks
拆分未定义的值
如果用户将尝试在未定义的值上拆分,则字符串将在每个字符上拆分。
例子:
# Perl program to demonstrate the
# splitting on undefined value
#!/usr/bin/perl
use strict;
use warnings;
# string to be split
my $str = 'GeeksforGeeks GFG';
# using split function
my @spl = split(undef, $str);
# displaying string after splitting
foreach my $i (@spl)
{
print "$i\n";
}
输出:
G
e
e
k
s
f
o
r
G
e
e
k
s
G
F
G
运行时错误:
Use of uninitialized value in regexp compilation at /home/38ececda726bcb7e68fb7b41eee5b8d9.pl line 12.
在模式或正则表达式上拆分
有时用户可能希望在模式(正则表达式)或特定类型的字符上拆分字符串。在这里,我们将使用特殊字符类来制作数字(整数)的模式,如下所示:
例子:
# Perl program to demonstrate the
# splitting on a pattern(regex)
#!/usr/bin/perl
use strict;
use warnings;
# string to be split
my $str = 'Geeks1for2Geeks';
# using split function
# \d+ will match one or more
# integer numbers & placed
# between two //
my @spl = split(/\d+/, $str);
# displaying string after splitting
foreach my $i (@spl)
{
print "$i\n";
}
Geeks
for
Geeks
拆分成哈希
用户可以将数据或字符串拆分为散列而不是数组。基本上,哈希是一个键/值对。在拆分用户之前,必须了解散列。
例子:
# Perl program to demonstrate the
# splitting into the hash
#!/usr/bin/perl
use strict;
use warnings;
# hash to be split
my $has = 'GFG=1;GEEKS=2;PROGEEK=3';
# using split function
my %spl = split(/[=;]/, $has);
# after splitting displaying the values
foreach my $i (keys %spl)
{
print "$i:$spl{$i}\n";
}
GFG:1
GEEKS:2
PROGEEK:3
空间分割
这里的空格不仅仅意味着' '这个空格,它还包括换行符、制表符等。
例子:
# Perl program to demonstrate the
# splitting on space
#!/usr/bin/perl
use strict;
use warnings;
# string to be splitted
my $str = "ProGeek\n\nSudo\nPlacements";
# using split function
my @spl = split(' ', $str);
# Displaying result by printing
# 'GFG' either side of the
# value, so that user can see
# where it split
foreach my $i (@spl)
{
print "GFG${i}GFG\n";
}
GFGProGeekGFG
GFGSudoGFG
GFGPlacementsGFG
要记住的要点
- 由于 split()函数还返回标量上下文中的值。因此,为了存储返回值,用户必须根据拆分部分的数量定义一些标量值。在下面的示例中,拆分后将有 4 个值,因此用户将在这里定义 4 个标量值并存储返回值。
例子:
# Perl program to demonstrate the # splitting on string and storing # values in scalars #!/usr/bin/perl use strict; use warnings; # string which is separated by !! sign my $str = 'GFG!Sudo!GeeksforGeeks!ProGeek'; # using split function and # storing values in scalars my ($sc1, $sc2, $sc3, $sc4) = split('!', $str); # displaying string after splitting print "$sc1\n$sc2\n$sc3\n$sc4";
输出:GFG Sudo GeeksforGeeks ProGeek
- 可能存在用户不传入要拆分的字符串的情况,默认情况下 split()函数将使用$_ ,如果用户不传递表达式,即要拆分的字符串,则它将使用' ' (一个空格) 。
例子:
# Perl program to demonstrate the # split() function and context #!/usr/bin/perl use strict; use warnings; # using foreach loop containing string values foreach ('G F G', 'Geeks for Geeks') { # using split() function my @spl = split; # displaying values to be split print "Split $_:\n"; foreach my $i (@spl) { print " $i\n"; } }
输出:Split G F G: G F G Split Geeks for Geeks: Geeks for Geeks
- 如果分隔符出现在要拆分的字符串的开头,则返回值的第一个元素将为空,并将存储到数组中。在下面的示例中,我们遇到了这种情况,我们正在打印结果数组的空值:
例子:
# Perl program to demonstrate the # split() function with the Delimiter # at the start of the string #!/usr/bin/perl use strict; use warnings; # string containing delimiter(, ) # at the starting my $str = ', GFG, Geeks'; # using split function my @spl = split(', ', $str); # printing "Array_Element: " with each # returned value so that you can see # the empty one foreach my $i (@spl) { print "Array_Element: $i\n"; }
输出:Array_Element: Array_Element: GFG Array_Element: Geeks
- 如果您还想将分隔符保留在结果中,那么只需将该分隔符放在括号内即可。
例子:
# Perl program to demonstrate the # split() function and keeping # the delimiter #!/usr/bin/perl use strict; use warnings; # string to be split my $str = 'Geeks1for2Geeks'; # using split function # \d+ will match one or more # integer numbers & placed # between two // and () to # keep the delimiter in result my @spl = split(/(\d+)/, $str); # displaying string after splitting foreach my $i (@spl) { print "$i\n"; }
输出:Geeks 1 for 2 Geeks