在perl中使用字符数组

时间:2014-07-07 11:21:30

标签: arrays regex perl

我有一个字符串说,s1 ='hello',我想像数组一样操作它,例如在c ++中我们可以使用s1 [i]来单独处理这个数组的字符,我们如何在perl中进行操作?我想在s1 [0]添加字符,字符为s1 [1]。我尝试使用

  $s=join('',$s1[0],$s1[1]); 
  $s=$s1[0].$s1[1];
  $s=${s1[0]}.${s2[0]};

但无法连接字符。我想添加h和e并将他,类似e和l作为el等等,直到单词的结尾然后继续下一个单词。

我也可以检查s [i]是否在列表中(b,c,d,h,l),如果s [i + 1]在(a,e,i,o,u)中,那么添加s [i]和s [i + 1]。

  

示例输入:
  你好是盘子来电者

     

样品输出:
  他,我   di s k
  ca l le r

5 个答案:

答案 0 :(得分:1)

基本上,您希望在两个单词字符之间插入一个空格,只要它们不在您指定的两个单词集中。

您可以使用其他人演示的substr来执行此操作,但这种类型的文本操作是正则表达式设计的一件事:

use strict;
use warnings;

while (<DATA>) {
    s/(?![bcdhl][aeiou])\w\K(?=\w)/ /g;
    print;
}

__DATA__
hello 
disk 
caller

输出:

he l lo
di s k
ca l le r

答案 1 :(得分:0)

像这样,使用substr()挑选个别字符:

perl -E '$s="hello";say substr($s,0,1),substr($s,4,1)'

输出:

ho

答案 2 :(得分:0)

substr()是可行的:

print substr($s, $_, 1), " " for (0..length($s) - 1)

输出:

h l l l o

substr()对于就地操作也是可以的,只要它返回ref-value:

substr($s,0,2) = '';
say $s;

输出:

LLO

答案 3 :(得分:0)

my @char_array = split "", $s1;

@char_array现在包含$s1字符串的所有字符,并且可以对其进行操作,迭代或对其执行任何操作,就像使用任何其他数组一样。

答案 4 :(得分:0)

您可以splice在数组的给定位置插入元素:

echo -e 'hello\ndisk\ncaller' | perl -F'' -ane ' splice (@F,2,0," "); splice(@F,4,0," "); foreach(@F){print}'
he l lo
di s k
ca l ler

在使用数组时,您可以使用Data :: Dumper实现更好的可视化:

echo -n 'hello' | perl -MData::Dumper -F'' -ane ' splice (@F,2,0," "); splice(@F,4,0," ");print Dumper(\@F)'
$VAR1 = [
          'h',
          'e',
          ' ',
          'l',
          ' ',
          'l',
          'o'
        ];