[英]Perl: Removing characters up to certain point.
我嘗試搜索已經提出的問題,但似乎找不到任何東西。 我敢肯定它的操作非常簡單,但是我對Perl完全陌生。
我想做的是刪除字符串中的某個字符,直到某一點為止。 例如,我有:
參數1:0xFFFF
而我想做的就是刪除“ Parameter1:”,只剩下“ 0xFFFF”。 如果有人可以幫助您並簡單說明所使用的運算符,那就太好了。
聽起來您需要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";
s/.*:\s*//;
要么
$s =~ s/.*:\s*//;
這會刪除直到:
包括:第一次出現的所有內容,然后刪除零個或多個空格字符。 $s =~
應用於$s
; 沒有它,它將應用於$_
。
您是否考慮過使用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
而不是對其進行read_config
。
我喜歡拆分這些參數/值對。
my $str = "Parameter1 : 0xFFFF";
my ($param, $value) = split /\s*:\s*/, $str, 2;
請注意,在拆分中使用了LIMIT,這將拆分限制為兩個字段(如果值中包含其他冒號)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.