1

たとえば、次の2行の文字列が与えられます。

May 22 00:46:38.340  prod-lab03c-rd1 fpc4 XETH(4/2): %PFE-6: Link 0 XFP: Low Rx power warning set
[May 24 11:24:28.299 LOG: Notice] MIC(0/1) link 1 SFP receive power low  warning set

次の数値を3つの変数に格納したいと思います。

[1] the 1st number after the "(", it could be 1 or more digits
[2] the 1st number after the "/", it could be 1 or more digits
[3] the first number after the "(L|l)ink" word, it could be 1 or more digits

これについて私を助けてくれませんか?

どうもありがとう

4

3 に答える 3

3

最初の番号の後に最初の番号を取得するには(、を使用できます.*\((\d+)。次に、の後の最初の番号を取得するには/、を使用できます/(\d+)\)。そして、「リンク」の後の最初の番号を取得するには:[lL]ink (\d+)。これらを組み合わせて取得します

^.*\((\d+)/(\d+)\).*[lL]ink (\d+)

3つの数字は3つのグループになります

于 2012-05-24T18:55:14.697 に答える
1

これはここで動作します

\((.*?)/(.*?)\).*?[Ll]ink (\d+)

あなたの入力を与えると、それが返されます

group 1  group 2 group 3
4        2       0
0        1       1
于 2012-05-24T18:52:58.897 に答える
0

Perl で完全にテストされた例:

#!/usr/bin/env perl

use strict;
use warnings;

my @a;

$a[0] = "May 22 00:46:38.340  prod-lab03c-rd1 fpc4 XETH(4/2): %PFE-6: Link 0 XFP: Low Rx power warning set\n";
$a[1] = "[May 24 11:24:28.299 LOG: Notice] MIC(0/1) link 1 SFP receive power low  warning set";

foreach (@a) {
    print "\$1=$1|\$2=$2|\$3=$3\n" if m!\((\d+)/(\d+)\).*?(?:L|l)ink\s+(\d+)!;
}

出力 :

$1=4|$2=2|$3=0
$1=0|$2=1|$3=1
于 2012-05-24T19:08:01.867 に答える