我正在尝试将所有Google Play的类别划分为单独的链接,例如https://play.google.com/store/apps/category/ART_AND_DESIGN
这是我提出的代码
use LWP::Simple;
$url = 'https://play.google.com';
my $html = get($url);
while ( $html =~ /href\=\"(\/store\/apps\/category\/)([A-Z]+"|[A-Z]+_[A-Z]+"|[A-Z]+_[A-Z]+_[A-Z]+")/g ) {
print "$url$1$2\n";
}
问题是$2
也在最后给出了引号,例如https://play.google.com/store/apps/category/ART_AND_DESIGN"
打印时如何摆脱双引号"
?
答案 0 :(得分:3)
好的,您应该使用适当的模块处理HTML,但我会解释问题
首先,您可以为模式使用不同的分隔符,而不是转义所有斜杠。 /.../
与m/.../
相同,但如果您使用m
(对于"匹配"),则可以选择不同的分隔符。在这里,我使用了惊叹号!
其次,在第二次捕获中添加结束双引号或者给出零,一或两个下划线的所有备选方案都没有什么意义。 \w
元字符匹配"字"字符,与[0-9A-Za-z_]
相同,即字母数字或下划线。你只需要匹配尽可能多的那些
此测试应该有效
$html =~ m!href="(/store/apps/category/)(\w+)!g
要回答原始问题,chop
函数会删除字符串的最后一个字符。它不会在$2
上工作,因为该值是只读的,因此您需要声明自己的变量并首先复制它
my $capture = $2;
chop $capture;