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 パーサーは正しく言及されています。次の方法でMojo::DOMdivを使用すると、文字列の 2 番目の "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 に答える