Regex 如何使Perl正则表达式在反斜杠之后和特定文件扩展名之前匹配所有内容?

Regex 如何使Perl正则表达式在反斜杠之后和特定文件扩展名之前匹配所有内容?,regex,perl,Regex,Perl,“.\directory\[filename].xml” 我如何编写一个正则表达式来匹配上面包含引号的字符串?如何匹配.xml 到目前为止,我有以下几点。我不知道在这之后该如何进行,我对Perl非常陌生 $content =~ m/"..\\directory\\/ 谢谢 方法1(使用正则表达式) #/usr/bin/perl 严格使用; 使用警告; my$path=“..\\directory\\somefile.xml”; if(my($before)=$path=~m{^(.*

“.\directory\[filename].xml”

我如何编写一个正则表达式来匹配上面包含引号的字符串?如何匹配.xml

到目前为止,我有以下几点。我不知道在这之后该如何进行,我对Perl非常陌生

$content =~ m/"..\\directory\\/
谢谢

方法1(使用正则表达式)
#/usr/bin/perl
严格使用;
使用警告;
my$path=“..\\directory\\somefile.xml”;
if(my($before)=$path=~m{^(.*)\.xml$}){
打印“[$before]匹配!\n”;
}否则{
打印“不匹配!\n”;
};
输出:

[..\directory\somefile] match!
vol=
dirs=..\directory\
file=somefile.xml
方法2(使用) 此方法使用每个Perl发行版附带的内置模块文件::Spec

这可能比第一种方法更好,因为它是处理路径的专用模块

内置模块也值得一看

#!/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";
输出:

[..\directory\somefile] match!
vol=
dirs=..\directory\
file=somefile.xml
方法1(使用正则表达式)
#/usr/bin/perl
严格使用;
使用警告;
my$path=“..\\directory\\somefile.xml”;
if(my($before)=$path=~m{^(.*)\.xml$}){
打印“[$before]匹配!\n”;
}否则{
打印“不匹配!\n”;
};
输出:

[..\directory\somefile] match!
vol=
dirs=..\directory\
file=somefile.xml
方法2(使用) 此方法使用每个Perl发行版附带的内置模块文件::Spec

这可能比第一种方法更好,因为它是处理路径的专用模块

内置模块也值得一看

#!/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";
输出:

[..\directory\somefile] match!
vol=
dirs=..\directory\
file=somefile.xml

用于匹配基本名称组件的常规正则表达式如下所示

m{([^\\/]+)$}

在你的情况下,你可以这样修改一下


m{([^\\/]+\.xml)“$}

匹配基本名称组件的常规正则表达式如下所示

m{([^\\/]+)$}

在你的情况下,你可以这样修改一下


m{([^\\/]+\.xml)“$}

您是说[filename]是您要填写的变量值,还是要提取文件名?或者你想直接匹配那个字符串?你能在前面和后面加个例子吗?@lordadmira我想提取文件名。所以我会给它一些类似“.\directory\a_file.xml”的东西,然后我会返回“a_file.xml”。我知道File::Basename可以做到这一点,但我需要正则表达式用于其他目的。我用下面的正则表达式实现了它。\\目录\\(.*\.xml)\“/。您是说[filename]是一个要填写的变量值,还是要提取文件名?或者你想直接匹配那个字符串?你能在前面和后面加个例子吗?@lordadmira我想提取文件名。所以我会给它一些类似“.\directory\a_file.xml”的东西,然后我会返回“a_file.xml”。我知道File::Basename可以做到这一点,但我需要正则表达式用于其他目的。我用以下正则表达式实现了它。\\目录\(.*\.xml)\“/。