perl split用法
@fields=split/:/,“:::a:b:c:::”;为什么得到(“”,“”,“”,“a”,“b”,“c”);书上说"split将模式同字符串进行比较,将由分离符...
@fields = split /:/, “:::a:b:c:::” ;为什么得到(“”, “”, “”, “a”, “b”, “c”);书上说
"split将模式同字符串进行比较,将由分离符所分隔开的子串作为列表返回回来。当模式匹配上,既是此次匹配结束,和新匹配的开始可能得到空的元素,如果其中有两个分隔符是连在一起的" 展开
"split将模式同字符串进行比较,将由分离符所分隔开的子串作为列表返回回来。当模式匹配上,既是此次匹配结束,和新匹配的开始可能得到空的元素,如果其中有两个分隔符是连在一起的" 展开
4个回答
展开全部
Perl中的一个非常有用的函数是Perl split函数-把字符串进行分割并把分割后的结果放入数组中。这个Perl split函数使用规则表达式(RE),如果未特定则工作在$_变量上。
Perl split函数可以这样使用:
$info="Caine:Michael:Actor:14,LeafyDrive";
@personal=split(/:/,$info);
其结果是:@personal=("Caine","Michael","Actor","14,LeafyDrive");
◆如果我们已经把信息存放在$_变量中,那么可以这样:
@personal=split(/:/);
如果各个域被任何数量的冒号分隔,可以用RE代码进行分割:
$_="Capes:Geoff::Shotputter:::BigAvenue";
@personal=split(/:+/);
其结果是:@personal=("Capes","Geoff","Shotputter","BigAvenue");
但是下面的代码:
$_="Capes:Geoff::Shotputter:::BigAvenue";
@personal=split(/:/);
的结果是:@personal=("Capes","Geoff","","Shotputter","","","BigAvenue");
Perl split函数可以这样使用:
$info="Caine:Michael:Actor:14,LeafyDrive";
@personal=split(/:/,$info);
其结果是:@personal=("Caine","Michael","Actor","14,LeafyDrive");
◆如果我们已经把信息存放在$_变量中,那么可以这样:
@personal=split(/:/);
如果各个域被任何数量的冒号分隔,可以用RE代码进行分割:
$_="Capes:Geoff::Shotputter:::BigAvenue";
@personal=split(/:+/);
其结果是:@personal=("Capes","Geoff","Shotputter","BigAvenue");
但是下面的代码:
$_="Capes:Geoff::Shotputter:::BigAvenue";
@personal=split(/:/);
的结果是:@personal=("Capes","Geoff","","Shotputter","","","BigAvenue");
展开全部
那两个分隔符中间就是空白。就得到空白。
更多追问追答
追问
@fields = split /:/, “:::a:b:c:::”,这句中,第一个:和第二个:得到一个空白,第二个和第三个:得到二个空白,所以我认为是两个空白得到(“”, “”, “a”, “b”, “c”,“”,“”);
追答
我倒觉得得到("",“”, “”, “a”, “b”, “c”,“”,“”,"");不知道是不是最后的空白省略了。
展开全部
Perl split函数
Perl中的一个非常有用的函数是Perl split函数-把字符串进行分割并把分割后的结果放入数组中。这个Perl
split函数使用规则表达式(RE),如果未特定则工作在$_变量上。
Perl split函数可以这样使用:
$info="Caine:Michael:Actor:14,LeafyDrive";
@personal=split(/:/,$info);
其结果是:@personal=("Caine","Michael","Actor","14,LeafyDrive");
◆如果我们已经把信息存放在$_变量中,那么可以这样:
@personal=split(/:/);
如果各个域被任何数量的冒号分隔,可以用RE代码进行分割:
$_="Capes:Geoff::Shotputter:::BigAvenue";
@personal=split(/:+/);
其结果是:@personal=("Capes","Geoff","Shotputter","BigAvenue");
但是下面的代码:
$_="Capes:Geoff::Shotputter:::BigAvenue";
@personal=split(/:/);
的结果是:@personal=("Capes","Geoff","","Shotputter","","","BigAvenue");
◆这个Perl split函数中单词可以被分割成字符,句子可以被分割成单词,段落可以被分割成句子:
@chars=split(//,$word);
@words=split(//,$sentence);
@sentences=split(/\./,$paragraph);
在第一句中,空字符串在每个字符间匹配,所以@chars数组是一个字符的数组。>>
//之间的部分表示split用到的正则表达式(或者说分隔法则)
\s是一种通配符,代表空格
+代表重复一次或者一次以上。
所以,\s+代表一个或者一个以上的空格。
split(/\s+/,$line)表示把字符串$line,按空格为界分开。
Perl中的一个非常有用的函数是Perl split函数-把字符串进行分割并把分割后的结果放入数组中。这个Perl
split函数使用规则表达式(RE),如果未特定则工作在$_变量上。
Perl split函数可以这样使用:
$info="Caine:Michael:Actor:14,LeafyDrive";
@personal=split(/:/,$info);
其结果是:@personal=("Caine","Michael","Actor","14,LeafyDrive");
◆如果我们已经把信息存放在$_变量中,那么可以这样:
@personal=split(/:/);
如果各个域被任何数量的冒号分隔,可以用RE代码进行分割:
$_="Capes:Geoff::Shotputter:::BigAvenue";
@personal=split(/:+/);
其结果是:@personal=("Capes","Geoff","Shotputter","BigAvenue");
但是下面的代码:
$_="Capes:Geoff::Shotputter:::BigAvenue";
@personal=split(/:/);
的结果是:@personal=("Capes","Geoff","","Shotputter","","","BigAvenue");
◆这个Perl split函数中单词可以被分割成字符,句子可以被分割成单词,段落可以被分割成句子:
@chars=split(//,$word);
@words=split(//,$sentence);
@sentences=split(/\./,$paragraph);
在第一句中,空字符串在每个字符间匹配,所以@chars数组是一个字符的数组。>>
//之间的部分表示split用到的正则表达式(或者说分隔法则)
\s是一种通配符,代表空格
+代表重复一次或者一次以上。
所以,\s+代表一个或者一个以上的空格。
split(/\s+/,$line)表示把字符串$line,按空格为界分开。
本回答被网友采纳
展开全部
嘿, 首先得说一句, 你这本书译得真恶心.. 我半句都没看得明白.
split 很简单, 首先就是在一条字串中, 找出匹配的地方, 并将之 "取代" 为 "切割点".
然後从这切割点进行真正的切割.
但回传给你的数组中, 将会从尾到头地消掉没有值的元素, 直到(从尾到头)发现第一个有值的元素.
这是 split 预设的行为(因为多数人都这麼做就够).
但这有好, 也有不好, 假如我读的是一个 csv 档, 姓名 电话 地址... 备注1, 备注2 等等有9个列, 而你想确保读到 9 个(已知的)元素回来, 那麼如果後面的备注1, 备注2为空, 那麼你的数组只会有 7 个元素返回来, 这时, 你就会用得上 split 的第 3 个参数.
@fields = split /:/, ":::a:b:c:::";
print "<$_>" foreach @fields;
print $/;
@fields = split /:/, ":::a:b:c:::", 9;
print "<$_>" foreach @fields; # 这时就会有 9 个元素返回来
split 很简单, 首先就是在一条字串中, 找出匹配的地方, 并将之 "取代" 为 "切割点".
然後从这切割点进行真正的切割.
但回传给你的数组中, 将会从尾到头地消掉没有值的元素, 直到(从尾到头)发现第一个有值的元素.
这是 split 预设的行为(因为多数人都这麼做就够).
但这有好, 也有不好, 假如我读的是一个 csv 档, 姓名 电话 地址... 备注1, 备注2 等等有9个列, 而你想确保读到 9 个(已知的)元素回来, 那麼如果後面的备注1, 备注2为空, 那麼你的数组只会有 7 个元素返回来, 这时, 你就会用得上 split 的第 3 个参数.
@fields = split /:/, ":::a:b:c:::";
print "<$_>" foreach @fields;
print $/;
@fields = split /:/, ":::a:b:c:::", 9;
print "<$_>" foreach @fields; # 这时就会有 9 个元素返回来
更多追问追答
追问
如下代码计算出返回的是六个元素
@fileds = split /:/,":::a:b:c:::";
print "There are", scalar@fileds;
追答
那你的问题是 ?
本回答被提问者和网友采纳
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询