拆分开头和结尾的空字符串[复制]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拆分开头和结尾的空字符串[复制]相关的知识,希望对你有一定的参考价值。

可能重复: Split problem in Ruby

在Ruby中,当我使用与字符串开头匹配的分隔符拆分字符串时,它会在数组的初始位置给出一个空字符串:

"abc".split(/a/) # => ["", "bc"]

但是当我使用与字符串末尾匹配的分隔符执行类似的操作时,它不会给出空字符串:

"abc".split(/c/) # => ["ab"]

这看起来与我不一致。这种规格是否有任何理由?

编辑如果它要与Perl的规范兼容,就像muu是简短的答案一样,那么问题仍然是相同的:为什么它在Perl中是这样的?因此,现在它也成了关于Perl的问题。

答案

来自fine manual

split(pattern = $;,[limit])→anArray [...] 如果省略limit参数,则禁止尾随空字段。如果limit是正数,则最多将返回该字段数(如果limit为1,则整个字符串将作为数组中的唯一条目返回)。如果为负数,则返回的字段数没有限制,并且不会抑制尾随空字段。

所以尾随“空字段”被抑制,因为文档说它们是。如果你想要尾随空字符串,请求它:

'abc'.split(/c/, -1) # [ 'ab', '' ]

为什么它会那样?可能是因为它匹配Perl's split行为:

如果LIMIT为负数,则将其视为任意大;生成尽可能多的字段。

我们看到使用负limit,再次给我们尾随空字符串:

$ perl -e 'print join(",", split(/c/, "abc")), "
"'
ab
$ perl -e 'print join(",", split(/c/, "abc", -1)), "
"'
ab,

为什么要复制Perl的行为?问马茨。

另一答案

在读取AWK的规格后,mu太短了,我开始觉得在AWK中split的初衷是提取对应于字段的子字符串,每个字符串都用,.等标点符号终止,并且分隔符被认为是类似于“田野结束”的东西。目的不是将字符串对称地分成每个分隔符位置的左侧和右侧,而是在分隔符位置的左侧终止子字符串。在这个概念下,在分隔符的左侧总是有一些字符串(即使它是空的)是有意义的,但不一定在分隔符的右侧。这可能是通过Perl继承到Ruby的。

以上是关于拆分开头和结尾的空字符串[复制]的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:数字开头中间字母结尾数字

JavaScript 正则表达式 - 从开头和结尾删除空格

BZOJ 4650 [Noi2016]优秀的拆分:后缀数组

13如何拆分含有多种分隔符的字符串 14如何判断字符串a是否以字符串b开头或结尾 15如何调整字符串中文本的格式 16如何将多个小字符串拼接成一个大的字符串

如何在 javascript/jquery 中拆分字符串并测试字符串的开头? [复制]

two strings