【发布时间】:2015-12-14 18:22:55
【问题描述】:
假设我有一个变量,其中包含一堆文本,包括普通 HTML 标记中的 URL。特别是,我对标签的 src= 元素感兴趣。假设我知道我想在那一堆文本中搜索的确切 src= 字符串,并且我想用其他一些文本替换它。 . .这是我尝试过的一些方法(伪代码):
my $bunchotxt = << 'END_MESSAGE';
<a href="http://link.com/image.gif"><img class="alignleft size-thumbnail wp-image-295" src="http://link.com/image.gif" alt="shredding" width="150" height="150" /></a>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis convallis fringilla dui eget cursus. Nullam in mauris viverra elit pharetra fringilla. Pellentesque gravida ligula sit amet magna blandit, semper luctus enim semper. Nam a sem ut ex aliquam consectetur. Nulla enim metus, porta at elementum non, facilisis ullamcorper nisl. Vestibulum sed iaculis ante. Nullam mollis luctus posuere.
Suspendisse ipsum odio, iaculis in malesuada id, varius
END_MESSAGE
my $parser = HTML::TokeParser::Simple->new(
string => $bunchotxt
);
while ( my $tag = $parser->get_tag('img') ) {
#print $tag->as_is, "\n";
for my $attr ( qw( src ) ) {
$replaceStr = sprintf qq{%s="%s"\n}, $attr, $tag->get_attr($attr);
$parsedtag =~ s/"//g;
my @bits = $url->path_segments( );
$cidreplace{$unparsedtag} = $path;
}
my $replaceStr = "src:\"replaced\"";
$bunchotxt =~ s/$findURL/$replaceStr/g;
print "$buchotxt\n";
}
【问题讨论】:
-
那你只需要匹配你要匹配的字符串即可。您忽略了原始来源中的
"字符。 -
您在搜索模式中的第一个双引号放错了位置。此外,您不需要转义
=或:,但在这种情况下您确实需要转义.,因为您想匹配文字点。 -
伙计,我希望我能以真正应该被问到的方式重新发布这个问题。在我试图开始工作的代码中,$findstr 字符填充了另一个循环,该循环使用HTML::Tokeparser::Simple 从原始文本中获取所有 src= 元素的列表。所以 $findstr 最终获得了从代码的 Tokeparser 部分返回的值。我试过用 quotemeta() 来逃避它,但这似乎没有任何区别。希望您愿意在知道这一点后再次参与进来。
-
好的,我修改了上面的代码,考虑到我刚刚在上面所做的评论。希望有人愿意再试一次。
-
您的示例中仍然有一堆无关紧要的废话,实际上并没有说明问题!例如,
$findURL来自哪里?这很重要,因为这是问题的症结所在。另外,您说您尝试使用quotemeta,但我在您的代码中没有看到它。请了解如何创建minimal reproducible example。