saw*_*awa 8 ruby string perl split
可能重复:
Ruby中的拆分问题
在Ruby中,当我使用与字符串开头匹配的分隔符拆分字符串时,它会在数组的初始位置给出一个空字符串:
"abc".split(/a/) # => ["", "bc"]
Run Code Online (Sandbox Code Playgroud)
但是当我使用与字符串末尾匹配的分隔符执行类似的操作时,它不会给出空字符串:
"abc".split(/c/) # => ["ab"]
Run Code Online (Sandbox Code Playgroud)
这看起来与我不一致.这种规格是否有任何理由?
编辑 如果要与Perl的规范兼容,就像muu是简短的答案一样,那么问题仍然是相同的:为什么它在Perl中是这样的?因此,现在它也成了关于Perl的问题.
从精细手册:
split(pattern = $;,[limit])→anArray
[...]
如果省略limit参数,则禁止尾随空字段.如果limit是正数,则最多将返回该字段数(如果limit为1,则整个字符串将作为数组中的唯一条目返回).如果为负数,则返回的字段数没有限制,并且不会抑制尾随空字段.
所以尾随"空字段"被抑制,因为文档说它们是.如果你想要尾随空字符串,请求它:
'abc'.split(/c/, -1) # [ 'ab', '' ]
Run Code Online (Sandbox Code Playgroud)
为什么它会那样?可能是因为它符合Perl的split
行为:
如果
LIMIT
是否定的,则将其视为任意大; 生成尽可能多的字段.
我们看到使用负数limit
再次给我们尾随空字符串:
$ perl -e 'print join(",", split(/c/, "abc")), "\n"'
ab
$ perl -e 'print join(",", split(/c/, "abc", -1)), "\n"'
ab,
Run Code Online (Sandbox Code Playgroud)
为什么要复制Perl的行为?问马茨.
读完 AWK 的规范后,mu 太短了,我开始觉得 AWK 的初衷是提取字段对应的子字符串,每个子字符串都以,等split
标点符号结尾,分隔符被认为是类似“字段结束字符”。其目的不是将字符串对称地拆分为每个分隔符位置的左侧和右侧,而是在分隔符位置的左侧终止子字符串。在这个概念下,在分隔符的左侧始终有一些字符串(即使它是空的)是有意义的,但不一定在分隔符的右侧。这可能是通过 Perl 继承到 Ruby 的。,
.
归档时间: |
|
查看次数: |
664 次 |
最近记录: |