编写 Perl 正则表达式

write Perl Regex

我有一些 URL 如下:

http://srv1.Example.com/movie/99/09/06/The.True.Adventures.of.Wolfboy.2019.720p.asli.mkv.T8d89281498deef0.mkv?md5=d0c61a41d7d0095edc0210244561bb34&expires=1609025725

http://srv2.Example.com/movie/99/09/06/The.True.Adventures.of.Wolfboy.2019.720p.asli.mkv

现在我想要 select 这些 Example.com URL 并索引它们。所以需要一些正则表达式来做它并从中导出路径。我制作正则表达式,像这样:

http://[^/]+.Example.com/(?P[^?].(?:mp4|mkv))(.)

问题:当使用上面的正则表达式时,我导出的路径是这样的:

路径=movie/99/09/06/The.True.Adventures.of.Wolfboy.2019.720p.asli.mkv.T8d89281498deef0.mkv

但我想要支持 URL 的正则表达式并导出路径,如:

路径=movie/99/09/06/The.True.Adventures.of.Wolfboy.2019.720p.asli.mkv

非常感谢,如果能帮我写一个正则表达式来从 URL 导出路径,例如:

路径=movie/99/09/06/The.True.Adventures.of.Wolfboy.2019.720p.asli.mkv

此致,

哈米德·哈格申纳斯

这是你想要的吗?

http:\/\/(?:[^\/]+\.)?Example\.com\/(?P<path>[^?]+?\.(?:mkv|mp4))

查看测试here

使用 URL 解析模块代替正则表达式。该模块不仅会正确执行,而且您不必阅读或调试模式。获得对象后,您可以在其中查询所需的部分。

Mojo::URL是这么回事:

use Mojo::URL;

my $url = '...';

my $path = Mojo::URL->new( $url )->path;

还有URI:

use URI;

my $path = URI->new( $url )->path

对于命令行,我写了App::url。在幕后它做同样的事情,但我可以使用类似 sprintf 的格式来获取我想要的部分:

$ url '%P' http://www.example.com/a/b/c
/a/b/c