1

Stack Overflow RegEx Wizards、私はGoogleを精査しましたが、これに対する適切な解決策を見つけられませんでした。IPCONFIGの結果から1:NDNSサーバーを引き出す必要があります。以下の例では、最初の3つが必要になります。ただし、多かれ少なかれ存在する場合があります。

更新:最適には、DNS文字列の最初のコロン(:)にカーソルを置き、その後、英字に達するまでIPをキャプチャします。したがって、そのコロンからその英字に文字列をスクレイプすることができれば、IPを照合するために別の正規表現を実行できます。

DNS.*:最初のコロンに移動します(:)

英字まで先読みする必要があります。

重要な注意:使用しているサードパーティツールのため、正規表現のみを使用できます:)

これが私がIPとして使用している正規表現の値です。これにより、DNSだけでなく、すべてのIPがキャプチャされます...

(([0-9]){1,3}.){1,3}[0-9]{1,3}

IPCONFIGの例

    Subnet Mask . . . . . . . . . . . : 255.255.255.0
    Default Gateway . . . . . . . . . : 152.225.244.1
    DHCP Server . . . . . . . . . . . : 10.204.40.57
    DNS Servers . . . . . . . . . . . : 10.204.127.11
                                        10.207.2.50
                                        10.200.10.6
    Primary WINS Server . . . . . . . : 10.207.40.145
    Secondary WINS Server . . . . . . : 10.232.40.38
    Lease Obtained. . . . . . . . . . : Tuesday, August 28, 2012 6:45:12 AM
    Lease Expires . . . . . . . . . . : Sunday, September 02, 2012 6:45:12 A
4

5 に答える 5

1
#!/usr/bin/env perl

use strict;
use warnings;

my $data = <<END;
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 152.225.244.1
DHCP Server . . . . . . . . . . . : 10.204.40.57
DNS Servers . . . . . . . . . . . : 10.204.127.11
                                    10.207.2.50
                                    10.200.10.6
Primary WINS Server . . . . . . . : 10.207.40.145
Secondary WINS Server . . . . . . : 10.232.40.38
Lease Obtained. . . . . . . . . . : Tuesday, August 28, 2012 6:45:12 AM
Lease Expires . . . . . . . . . . : Sunday, September 02, 2012 6:45:12 A
END

my @ips = ();

if ($data =~ /^DNS Servers[\s\.:]+((\d{2}\.\d{3}\.\d{1,3}\.\d{1,3}\s*)+)/m) {
    @ips = split(/\s+/, $1);
    print "$_\n" foreach(@ips);
}
于 2012-08-30T17:33:30.927 に答える
0

マッチ

DNS.+?:(\s*([\d.]+).)+

グループを引き出します。これは、抽出されたテキストに改行やその他の空白が含まれる可能性があることを前提として、複数行の文字列全体が 1 つの blob に含まれていることを前提としています。/m最後のドットは改行に一致するため、オプションを使用する必要があります

于 2012-08-30T16:56:36.083 に答える
0

この正規表現と照合します (アクションを参照):

DNS Servers.*:\s*(.*(?:[\n\r]+\s+.*(?:[\n\r]+\s+.*)?)?)

最初のキャプチャ グループは、要求した 3 つの IP (最大 3 つ) になります。空白を確実にトリミングする必要があります。

編集:正規表現は最大 3 つの IP に一致するように修正されました。IP が少ない場合は、それらのみに一致します。

于 2012-08-30T17:24:36.540 に答える
0

unpack列ベースのデータを解析するには、正規表現の代わりに使用します。

#!/usr/bin/env perl

use strict;
use warnings;

while (<DATA>) {
    my ($ip) = unpack 'x36 A*';
    print "$ip\n";
}

__DATA__
DNS Servers . . . . . . . . . . . : 10.204.127.11
                                    10.207.2.50
                                    10.200.10.6
Primary WINS Server . . . . . . . : 10.207.40.145
Secondary WINS Server . . . . . . : 10.232.40.38

36スキップする実際の文字数に合わせて数値を調整する必要がある場合があります。

于 2012-08-30T16:47:38.590 に答える
0

個人的には、別の方向に進みたいと思います。ipconfig の出力を手動で解析する代わりに、Win32::IPConfig モジュールを使用します。 Win32::IPConfig - Windows NT/2000/XP/2003 用の IP 構成設定

use Win32::IPConfig;
use Data::Dumper;

my $host = shift || "127.0.0.1";
my $ipconfig = Win32::IPConfig->new($host);

my @searchlist = $ipconfig->get_searchlist;
print Dumper \@searchlist;
于 2012-08-30T17:07:15.840 に答える