Regex 如何使Perl正则表达式在反斜杠之后和特定文件扩展名之前匹配所有内容?
“.\directory\[filename].xml” 我如何编写一个正则表达式来匹配上面包含引号的字符串?如何匹配.xml 到目前为止,我有以下几点。我不知道在这之后该如何进行,我对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{^(.*
$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)\“/。