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