Perl - 搜索字符串

时间:2018-03-05 14:33:35

标签: perl

我想知道,如果$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\>)/;) {}

这不起作用。有人有想法吗?

2 个答案:

答案 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