String Perl:删除字符到某一点。

String Perl:删除字符到某一点。,string,perl,character,String,Perl,Character,我试着搜索已经问过的问题,但似乎什么也找不到。我确信这非常简单,但我对Perl完全陌生 我试图做的是删除字符串中的字符,直到某一点。例如,我有: 参数1:0xFFFF 我想做的是删除“Parameter1:”,只剩下“0xFFFF”。如果有人能提供帮助并对使用的运算符进行简单解释,那就太好了 听起来你需要这个功能 #!/usr/bin/perl use strict; use warnings; my $string = 'Parameter1 : 0xFFFF'; my

我试着搜索已经问过的问题,但似乎什么也找不到。我确信这非常简单,但我对Perl完全陌生

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

参数1:0xFFFF

我想做的是删除“Parameter1:”,只剩下“0xFFFF”。如果有人能提供帮助并对使用的运算符进行简单解释,那就太好了

听起来你需要这个功能

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

  my $string = 'Parameter1 : 0xFFFF';
  my $fragment =  substr $string, 12;
  print "  string: <$string>\n";
  print "fragment: <$fragment>\n";
#/usr/bin/perl
严格使用;
使用警告;
my$string='Parameter1:0xFFFF';
my$fragment=substr$string,12;
打印“字符串:\n”;
打印“片段:\n”;
听起来你需要这个功能

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

  my $string = 'Parameter1 : 0xFFFF';
  my $fragment =  substr $string, 12;
  print "  string: <$string>\n";
  print "fragment: <$fragment>\n";
#/usr/bin/perl
严格使用;
使用警告;
my$string='Parameter1:0xFFFF';
my$fragment=substr$string,12;
打印“字符串:\n”;
打印“片段:\n”;

这将删除第一次出现的
,后跟零个或多个空白字符之前的所有内容。使用
$s=~
将其应用于
$s
;如果没有它,它将应用于
$\uu


这将删除第一次出现的
,后跟零个或多个空白字符之前的所有内容。使用
$s=~
将其应用于
$s
;如果没有它,它将应用于
$。

您考虑过使用类似的工具吗

下面是如何手动解析这样的配置文件:

#!/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

当然,在现实生活中,您会将文件名传递给
read\u config
,而不是发出咕噜声。

您考虑过使用类似的方式吗

下面是如何手动解析这样的配置文件:

#!/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

当然,在现实生活中,您应该将文件名传递给
read\u config
,而不是将其发出咕噜声。

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

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

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

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

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

请注意在拆分中使用了LIMIT,它将拆分限制为两个字段(如果值中有额外的冒号)。

substr
只有在您知道要删除(或保留)多少字符时才有意义。@Keith:但是
index
substr
结合使用可能是一个有效的选择(当然,这取决于字符串的预期格式)。是,substr()可以用一个表达式来表示偏移量。-呵呵,我想我们同时也考虑过了!@muistooshort:我会说你仍然需要知道有多少个字符;你可以在运行时知道它。但是regexp解决方案更习惯用法,更容易阅读。
substr
在某些情况下可能更快是的,但除非我知道会有重大改进,否则我不会进行这种微优化。两种解决方案在技术上都是正确的。我建议使用函数,因为这显然是一个初学者问题。
substr
只有在知道要删除(或保留)多少字符时才有意义@Keith:但是
index
substr
组合可能是一个有效的选择(当然取决于字符串的预期格式)。是的,substr()可以用一个表达式来表示偏移量。-呵呵,我想我们同时也考虑过了!@muistooshort:我会说你仍然需要知道有多少个字符;你可以在运行时知道它。但是regexp解决方案更习惯用法,更容易阅读。
substr
在某些情况下可能更快但是,除非我知道会有显著的改进,否则我不会进行这种微优化。两种解决方案在技术上都是正确的。我建议使用函数,因为这显然是一个初学者的问题。顺便说一句,我想在我的配置文件
参数1:0xFFFF中说,请参阅Frobnitator手册第42.17节。64
在这种情况下,
拆分
方法需要额外的工作。不过,我看到Config::Std也不允许这样的注释。
$value=~s/#.+//;
相当简单。顺便说一句,我想在我的配置文件
参数1:0xFFFF#请参阅Frobnitator手册第42.17.64节
<代码>拆分方法需要额外的工作。不过,我看到Config::Std也不允许这样的注释。
$value=~s/#。+//code>相当简单。