2

我的问题看起来像 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

如何找到我的特定单词之前的第一个“>”,而不是整个文本的第一个“>”?

4

2 回答 2

3

HTML::TreeBuilder 是在 Perl 中解析 HTML 的更好方法。

但是要回答这个问题,您可能想要匹配/[^>]*${specific_word}[^<]*/g,它基本上表示它>不在短语的左侧,<也不在短语的右侧。

于 2013-01-13T10:59:26.853 回答
1

正确地提到了一个 html 解析器。您可以通过以下方式div使用Mojo::DOM在字符串的第二个中找到“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
于 2013-01-13T20:42:24.383 回答