我如何做一个匹配反斜杠之后和特定文件扩展名之前的所有内容的 Perl 正则表达式?
How do I do a Perl regex that matches everything after a backslash and before a certain file extension?
"..\目录\[文件名].xml"
我将如何着手编写与上述字符串匹配并包含引号的正则表达式?我如何匹配 .xml?
到目前为止,我得到了以下信息。不确定之后如何进行,我对 Perl 还很陌生。
$content =~ m/"..\directory\/
谢谢!
方法一(使用正则表达式)
#!/usr/bin/perl
use strict;
use warnings;
my $path = "..\directory\somefile.xml";
if(my ($before) = $path =~ m{^(.*)\.xml$}) {
print "[$before] match!\n";
} else {
print "no match!\n";
};
输出:
[..\directory\somefile] match!
方法二(使用File::Spec::Win32)
此方法利用每个 Perl 发行版附带的内置模块 File::Spec。
这可能比第一种方法更好,因为它是处理路径的专用模块。
内置模块File::Basename也值得一看
#!/usr/bin/perl
use strict;
use warnings;
use File::Spec::Win32;
my $path = "..\directory\somefile.xml";
my ($volume,$directories,$file) = File::Spec::Win32->splitpath($path);
print "vol=$volume\n";
print "dirs=$directories\n";
print "file=$file\n";
输出:
vol=
dirs=..\directory\
file=somefile.xml
匹配基本名称组件的正常正则表达式是这样的。
m{([^\/]+)$}
在您的情况下,您可以像这样稍微修改一下。
m{([^\/]+\.xml)"$}
"..\目录\[文件名].xml"
我将如何着手编写与上述字符串匹配并包含引号的正则表达式?我如何匹配 .xml?
到目前为止,我得到了以下信息。不确定之后如何进行,我对 Perl 还很陌生。
$content =~ m/"..\directory\/
谢谢!
方法一(使用正则表达式)
#!/usr/bin/perl
use strict;
use warnings;
my $path = "..\directory\somefile.xml";
if(my ($before) = $path =~ m{^(.*)\.xml$}) {
print "[$before] match!\n";
} else {
print "no match!\n";
};
输出:
[..\directory\somefile] match!
方法二(使用File::Spec::Win32)
此方法利用每个 Perl 发行版附带的内置模块 File::Spec。
这可能比第一种方法更好,因为它是处理路径的专用模块。
内置模块File::Basename也值得一看
#!/usr/bin/perl
use strict;
use warnings;
use File::Spec::Win32;
my $path = "..\directory\somefile.xml";
my ($volume,$directories,$file) = File::Spec::Win32->splitpath($path);
print "vol=$volume\n";
print "dirs=$directories\n";
print "file=$file\n";
输出:
vol=
dirs=..\directory\
file=somefile.xml
匹配基本名称组件的正常正则表达式是这样的。
m{([^\/]+)$}
在您的情况下,您可以像这样稍微修改一下。
m{([^\/]+\.xml)"$}