【发布时间】:2012-06-12 21:10:54
【问题描述】:
有一个类似措辞的问题,但我认为这略有不同。
基本上,假设我有这个字符串:
“aa{bb{dccd”
这里我想在最后一个大括号{处分割字符串;并将零件作为数组返回。我可以使用rindex 轻松找到该字符的位置(从 0 开始的索引):
perl -e '
$aa="aa{bb{dccd" ;
$ri = rindex($aa, "{") ;
print "$ri\n"; '
5
...鉴于我不是 Perl 编码器,我首先想到的是使用类似 之类的东西。不幸的是,这不是正确的语法 - $str = split($aa, 3)split 将正则表达式作为第一个参数(匹配的内容),将字符串作为第二个参数 - 它不采用整数位置索引作为参数。
我发现类似Perl Guru Forums: Perl Programming Help: Intermediate: split or splice string on char count? 的帖子,推荐在类似的上下文中使用substr;但是,我必须根据上面的示例编写两个substrs 来填充列表,所以我宁愿听到关于 substr 的替代方案。
基本上,如果匹配第 N 个字符的位置的问题可以表示为正则表达式匹配,那么 split 也可以工作 - 所以这将是我的主要问题。但是,我也很想知道是否有 Perl 内置函数可以接受指定字符位置的整数列表/数组,并返回包含拆分部分的数组。
编辑:
总结以上内容-我想要字符索引,因为我想将它们打印出来以进行调试;同时,使用它们将字符串拆分为数组 - 但不使用substrs。
EDIT2:我刚刚意识到我在 OP 中遗漏了一些东西——也就是说,在我正在处理的问题中,我必须首先检索字符索引(通过 rindex 或其他方式);然后我必须对它们进行计算(因此它们可能会增加或减少) - 只有这样我才应该拆分字符串(基于新的索引值)。可能是我原来的例子太简单了,并没有过多地表达对索引/字符位置的关注(更不用说我第一次想到split 暗示了字符索引——但我真的不能记住它来自哪个编程语言:))
【问题讨论】:
-
如果您的问题需要的不是我的答案,我不知道它是什么。
-
感谢@tchrist 的评论;事实是,它是正确的 -
unpack可用于拆分为单行数组,是内置的,并且可以接受字符索引(我要求的所有内容) - 但是,split也可以本身,带有相应的正则表达式。所以现在我不太确定要接受什么(因为这对我来说是相当多的新信息和有些出乎意料的信息,所以我要等一会儿,直到我接受答案,因为我真的很感激以下所有示例)。干杯! -
我只是想确定对您问题的编辑是否改变了问题的性质,从而需要不同的答案。
-
嗨@tchrist - 我不这么认为;我只是试图澄清为什么标题中提到的字符位置很重要(现在我可以看到该示例的简单性使其具有误导性,因为确实 - 不一定需要索引来解析该示例Perl)。一旦我解决了我的想法,我可能应该再次重新编辑这个问题
:)干杯!