我想知道,如果$search
中没有$content
。搜索字符串不应位于h2标记中。
my $search="Hello World";
my $content="<p>Hello World<h2>Is Hello World inside this tag?</h2><p>Thank you";
if ($content !~ /<h2>.*?($search \<\/h2\>)/;) {}
这不起作用。有人有想法吗?
答案 0 :(得分:0)
</h2>
不会立即关注$search
。但是在正则表达式.*
之后添加.*?
或$search
仍然无法完全解决问题,例如它认为以下是“内部”:
my $content="<h2>Is it inside this tag?</h2><p>Thank you Hello World</h2>";
这可能是你想要的:
my $inside;
while ($content =~ m{(<h2>.*?</h2>)}g) {
my $h2 = $1;
$inside = 1 if -1 != index $h2, $search;
}
say $inside ? 'yes' : 'no';
但是,通过HTML解析器解析内容会更好。
答案 1 :(得分:0)
我强烈建议使用正确的HTML解析器;这里我使用Mojo::DOM
,因为它有一个相当现代的界面,但还有其他几个模块可用。
use warnings;
use strict;
use Mojo::DOM;
my $search="Hello World";
my $content="<p>Hello World<h2>Is Hello World inside this tag?</h2><p>Thank you";
my $dom = Mojo::DOM->new($content);
my $found = defined($dom->find('h2')->map('all_text')->first(qr/\Q$search\E/));
print $found ? "Found it\n" : "Didn't find it\n";
__END__
Found it