我目前遇到以下问题;
open(my $fh, "<", "index.html") or die "cannot open index.html";
foreach my $line (<$fh>) {
$line =~ '\"(.*?)\';
print $line;
我的正则表达式无法正常工作,我将在下面向您展示我想要获得的内容;
<hr/>NUMBER.<br/><img class="cqm" border="0" src="UNIQUENUMBER..png"/>
<hr/>NUMBER.<br/><img class="cqm" border="0" src="UNIQUENUMBER..png"/>
现在我已经用DPA替换了实际数字,但这些都是唯一的,.html文件采用上述格式,上面有100个条目。
我需要用每一行去除它,并且它只在src =&#34;之间打印UNIQUENUMBER。和..png
非常感谢任何帮助。
谢谢你, 阿什利
答案 0 :(得分:1)
我不知道为什么你认为正则表达式会起作用。它只匹配双引号和单引号之间的第一个字符串大小写(无论如何都应该存在)。你在寻找的是:
$line =~ /src="(.*?)\.*png"/;
print $1;
答案 1 :(得分:0)
use strict;
use warnings;
open my $in, '<', 'in.txt';
while(<$in>){
chomp;
my ($nums) = /src="(\d+?\.?\d+?)\.\.png/;
print "$nums\n";
}
将匹配0.1
,1
或1.0
答案 2 :(得分:0)
我强烈建议您在处理HTML时使用实际的HTML Parser。
以下使用Mojo::DOM
使用类.cqm提取所有图像标记,并在png结束时输出src属性:
use strict;
use warnings;
use autodie;
use Mojo::DOM;
#open my $fh, "<", "index.html";
my $fh = \*DATA;
my $dom = Mojo::DOM->new(
do { local $/; <$fh> }
);
for my $src ( $dom->find('img.cqm')->attr('src')->each ) {
if ( $src =~ /(.*)\.png/ ) {
print "$1\n";
}
}
__DATA__
<hr/>NUMBER.<br/><img class="cqm" border="0" src="UNIQUENUMBER..png"/>
<hr/>NUMBER.<br/><img class="cqm" border="0" src="UNIQUENUMBER..png"/>
输出:
UNIQUENUMBER.
UNIQUENUMBER.
要获得有用的8分钟介绍性视频,请查看Mojocast Episode 5。