我是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个标量变量中。请建议使用正则表达式来提取这些内容。
提前致谢
答案 0 :(得分: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
。
答案 1 :(得分: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
答案 2 :(得分:2)
my ($x, $y) = split /------/, $string;
my ($z) = $y =~ /(\S+)\z/;