我正在尝试提取磁铁链接的名称。这是我的代码:
use strict;
use warnings;
use v5.18.0;
my $link = 'magnet:?xt=urn:btih:CD46E14A7D62A85607D0F38F0CEE6EE7FEA34209&dn=inherent+vice+2014+dvdscr&tr=udp%3A%2F%2Fexplodie.org%3A6969%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.com%3A1337';
$link =~ m/dn=(.*)&/;
my $link_text = $1;
say $link_text;
生成的$ link_text包含捕获组之后的字符: 固有+副+ 2014 + + DVDSCR XVID + AC3 + EVO&安培; TR = UDP%3A%2F%2Finferno.demonoid.ph%3A3389%2Fannounce
我可以通过后续替换去掉尾随参数:
$link_text =~ s/&.*//;
say $link_text;
返回我正在寻找的内容: 固有+副+ 2014 + DVDSCR
我在第一个正则表达式中做错了什么?
答案 0 :(得分:2)
*
是greedy运算符,意味着它将尽可能多地匹配,并且仍然允许正则表达式的其余部分匹配。使用*?
表示非贪婪匹配,表示“零或更多 - 最好尽可能少”。
dn=(.*?)&