(正则表达式)检索两个符号之间的特定单词的整个短语

时间:2013-01-13 07:41:57

标签: regex perl match

我的问题在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;”整篇文章?

2 个答案:

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