Perl:删除特定点的字符。

时间:2011-10-21 00:37:34

标签: string perl character

我试过搜索已经问到的问题,但似乎找不到任何东西。我确信它非常简单,但我对Perl来说是全新的。

我要做的是将字符串中的字符删除到某一点。例如,我有:

参数1:0xFFFF

我想要做的是删除“Parameter1:”并留下“0xFFFF”。如果有人可以帮助并简单解释所使用的运算符,那就太好了。

4 个答案:

答案 0 :(得分:2)

听起来你需要substr功能。

  #!/usr/bin/perl
  use strict;
  use warnings;

  my $string = 'Parameter1 : 0xFFFF';
  my $fragment =  substr $string, 12;
  print "  string: <$string>\n";
  print "fragment: <$fragment>\n";

答案 1 :(得分:1)

s/.*:\s*//;

$s =~ s/.*:\s*//;

这将删除所有内容,包括第一次出现:后跟零个或多个空格字符。 $s =~ $s已应用于$_;没有它,它适用于{{1}}。

答案 2 :(得分:1)

您是否考虑使用Config::Std之类的内容?

以下是如何手动解析配置文件:

#!/usr/bin/perl

use strict; use warnings;

my %params;

while ( my $line = <DATA> ) {
    if ($line =~ m{
            ^
            (?<param> Parameter[0-9]+)
            \s*? : \s*?
            (?<value> 0x[[:xdigit:]]+)
        }x ) {
        $params{ $+{param} } = $+{value};
    }
}

use YAML;
print Dump \%params;

__DATA__
Parameter1 : 0xFFFF
Parameter3 : 0xFAFF
Parameter4 : 0xCAFE

使用Config::Std

#!/usr/bin/perl

use strict; use warnings;
use Config::Std;

my $config = do { local $/; <DATA> };

read_config \$config, my %params;

use YAML;
print Dump \%params;

__DATA__
Parameter1 : 0xFFFF
Parameter3 : 0xFAFF
Parameter4 : 0xCAFE

当然,在现实生活中,你会将文件名传递给read_config而不是诋毁它。

答案 3 :(得分:1)

我喜欢拆分这些参数/值对。

my $str = "Parameter1 : 0xFFFF";
my ($param, $value) = split /\s*:\s*/, $str, 2;

请注意在分割中使用LIMIT,它将分割限制为两个字段(如果值中包含其他冒号)。