繁体   English   中英

如何执行 Perl 正则表达式匹配反斜杠之后和某个文件扩展名之前的所有内容?

[英]How do I do a Perl regex that matches everything after a backslash and before a certain file extension?

“..\目录\[文件名].xml”

我将如何 go 关于编写与包含引号的上述字符串匹配的正则表达式? 如何匹配到.xml?

到目前为止,我有以下内容。 不知道在此之后如何继续,我对 Perl 很陌生。

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

谢谢!

方法1(使用正则表达式)

#!/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";
};

Output:

[..\directory\somefile] match!

方法 2(使用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";

Output:

vol=
dirs=..\directory\
file=somefile.xml

匹配基本名称组件的正常正则表达式是这样的。

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

在你的情况下,你会像这样修改它。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM