0

文字列からサイズ値を抽出したい。文字列は、次の 2 つの方法のいずれかでフォーマットできます。

データサイズ: (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";

問題は、単語ファイルをオプションにすることにあるようです。私はこれを行うことができると思いました:

(ファイル)?

しかし、単語ファイルが存在しない場合、これは一致を停止しているようです。また、ファイルという単語が存在する場合は、$length を文字列 "file" に設定します。これは、ファイルを囲む括弧も抽出を意味するためだと思います。

では、2 つの文字列のいずれかを照合してサイズ値を抽出するにはどうすればよいでしょうか。

4

2 に答える 2

4

で 2 番目のキャプチャが必要です$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-08T06:47:24.100 に答える
0

ちょうど私の 2 セント、別の方法でオプションのマッチングを行うことができます。

/(ファイル|)\s*データサイズ: ((\d+)バイト)/

于 2012-12-09T04:42:44.423 に答える