regex - 如何从字符串变量中删除最后一个字符?
问题描述
例如,我正在尝试将 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"
"
打印时 如何去掉双引号?
解决方案
好的,您确实应该使用适当的模块处理 HTML,但我将解释问题
首先,您可以为模式使用不同的分隔符,而不是转义所有这些斜杠。/.../
与 相同m/.../
,但如果您使用m
(for "match") 那么您可以选择不同的分隔符。这里我用了感叹号!
其次,在第二次捕获中添加结束双引号,或者给出零、一个或两个下划线的所有替代项没有什么意义。元\w
字符匹配“单词”字符,与[0-9A-Za-z_]
字母数字或下划线相同。你只需要匹配尽可能多的那些
这个测试应该有效
$html =~ m!href="(/store/apps/category/)(\w+)!g
为了回答您最初的问题,该chop
函数删除了字符串的最后一个字符。它不起作用,$2
因为该值是只读的,因此您需要声明自己的变量并首先复制它
my $capture = $2;
chop $capture;
推荐阅读
- python - 在给定时间段内查找给定组的平均值
- r - 利用glm概率在R中制作表格
- python - 循环继续循环,即使在终止消息之后
- java - 有没有办法使用 JFoenix 库来显示时间并每秒更新一次?
- prolog - 在 Prolog 编程中计算 Y 实际上(X,Y)发生的次数
- ios - AppDelegate 到 SceneDelegate
- javascript - React.js - 列表中的每个孩子都应该有一个唯一的“关键”道具
- c# - ReflectionOnlyLoadFrom 后无法从程序集中获取类型
- python - 对目录中的所有文件运行 python 脚本
- r - 如何使用 R 获取 pdf 中每个页面的大小(不是页面大小,而是 MB)?