我的问题在Stackoverflow中看起来像其他一些问题,但我没有找到我想要的东西。
我需要检索包含特定单词的整个短语。这句话也介于“>”之间和“<”。
例如:
text:
"<div>bla bla bla</div><div>blu blu GOLD blu</div><form> bla bla...."
What I need is:
blu blu GOLD blu
我正试图在Perl中做到这一点。我到现在所拥有的是:
$specific_word = GOLD;
while ($var=~/[>]?(?<phrase>(.*?)\Q$specific_word\E(.*?))</ig) {
script.....
}
鉴于上面的例子,我得到的这个正则表达式是:
<div>bla bla bla</div><div>blu blu GOLD blu
如何查找第一个“&gt;”在我的具体词之前,而不是第一个“&gt;”整篇文章?
答案 0 :(得分:3)
HTML :: TreeBuilder是一种在Perl中解析HTML的更好方法。
但要回答这个问题,您可能希望匹配/[^>]*${specific_word}[^<]*/g
,这基本上表示>
不在左侧,<
不在右侧这句话。
答案 1 :(得分:1)
正确地提到了一个html解析器。您可以通过以下方式使用Mojo::DOM在字符串的第二个div
中找到“GOLD”:
use strict;
use warnings;
use Mojo::DOM;
my $html = '<div>bla bla bla</div><div>blu blu GOLD blu</div>';
my $dom = Mojo::DOM->new($html);
for my $e ( $dom->div->each ) {
print $e->text if $e->text =~ /\bGOLD\b/;
}
输出:
blu blu GOLD blu