-2

我是 Perl 的新手,我正在尝试提取文件的路径。请帮助我使用合适的正则表达式,这是我的代码:

$string = "D:/EZ-VPN/NKEMSL0-V02.txt------vpnclient server 156.37.253.97"; 

我想提取"D:/EZ-VPN/NKEMSL0-V02.txt"并将"156.37.253.97"其存储在 2 个标量变量中。请建议一个正则表达式来提取这些。

提前致谢

4

3 回答 3

4
#!/usr/bin/perl

use strict;

my $string = "D:/EZ-VPN/NKEMSL0-V02.txt------vpnclient server 156.37.253.97"; 

$string =~ m/(.*?)--+.* (\d+\.\d+\.\d+\.\d+)/;

print $1."\n";
print $2."\n";

这应该适合你。

Perl 从变量中正则表达式的括号(所谓的捕获组)收集结果$1, $2 ... $n

文件名在$1,IP地址在$2

于 2012-11-12T07:51:07.107 回答
2

使用 6 个连续破折号的字符串来标记路径的结尾:

my($path, $ipaddress) = ($string =~ m/(.*?)------.* (\d+\.\d+\.\d+\.\d+)/);

测试脚本:

#!/usr/bin/env perl
use strict;
use warnings;
my $string = "D:/EZ-VPN/NKEMSL0-V02.txt------vpnclient server 156.37.253.97"; 
my($path, $ipaddress) = ($string =~ m/(.*?)------.* (\d+\.\d+\.\d+\.\d+)/);
print "path = $path; IP = $ipaddress\n";

输出:

path = D:/EZ-VPN/NKEMSL0-V02.txt; IP = 156.37.253.97
于 2012-11-12T07:53:55.890 回答
2
my ($x, $y) = split /------/, $string;
my ($z) = $y =~ /(\S+)\z/;
于 2012-11-12T08:16:25.410 回答