我想从字符串中提取大小值。可以通过以下两种方式之一对字符串进行格式化:
数据大小:(2000字节)
或
文件数据-大小:(2082字节)
如果字符串存在于文件中,则只显示一次。
到目前为止,我已经:
#!/usr/bin/perl
use strict;
use warnings;
open FILE, "</tmp/test";
my $input = do { local $/; <FILE> };
my ($length) = $input =~ /(file)?\s*Data-Size: \((\d+) bytes\)/m;
$length or die "could not get data length\n";
print "length: $length\n";问题似乎在于使word file可选。我想我可以用:
(档案)?
但当单词文件不存在时,这似乎是在停止匹配。此外,当单词文件存在时,它会将$length设置为字符串" file“。我认为这是因为文件周围的括号也意味着提取。
那么如何匹配这两个字符串中的任何一个并提取大小值呢?
发布于 2012-12-08 06:47:24
您需要$length中的第二次捕获。要做到这一点,你可以
my (undef, $length) = $input =~ /(file)?\s*Data-Size: \((\d+) bytes\)/;或
my $length = ( $input =~ /(file)?\s*Data-Size: \((\d+) bytes\)/ )[1];但是,更好的方法是避免捕获您不感兴趣的内容。
my ($length) = $input =~ /(?:file)?\s*Data-Size: \((\d+) bytes\)/;当然,你也会得到同样的结果
my ($length) = $input =~ /Data-Size: \((\d+) bytes\)/;顺便说一下,我删除了不必要的/m。/m改变了^和$的含义,但在模式中两者都不存在。
发布于 2012-12-09 04:42:44
只要我的2分钱,你可以选择其他方式匹配:
数据大小:((\d+)字节)/
https://stackoverflow.com/questions/13775222
复制相似问题