2 votes

(regex) récupérer une phrase entière avec un mot spécifique entre 2 symboles

Ma question ressemble à d'autres questions sur Stackoverflow, mais je n'ai pas trouvé exactement ce que je cherchais.

J'ai besoin de retrouver une phrase entière qui contient un mot spécifique. Cette phrase se trouve également entre ">" et "<".

Par exemple :

text:
 "<div>bla bla bla</div><div>blu blu GOLD blu</div><form> bla bla...."

What I need is:
 blu blu GOLD blu

J'essaie de faire ça en Perl. Ce que j'ai jusqu'à présent est :

$specific_word = GOLD;
while ($var=~/[>]?(?<phrase>(.*?)\Q$specific_word\E(.*?))</ig) {
   script.....
}

Ce que j'obtiens avec cette regex, étant donné l'exemple ci-dessus, est : <div>bla bla bla</div><div>blu blu GOLD blu

Comment faire pour trouver le premier ">" avant mon mot spécifique, et non le premier ">" de tout le texte ?

3voto

tom_14159 Points 74

HTML::TreeBuilder est une meilleure façon d'analyser le HTML en Perl.

Mais pour répondre à la question, vous voulez probablement faire correspondre /[^>]*${specific_word}[^<]*/g qui dit essentiellement que > n'est pas sur le côté gauche et < n'est pas sur le côté droit de la phrase.

1voto

Kenosis Points 6136

Un analyseur html a été mentionné à juste titre. Vous pouvez trouver "GOLD" dans la deuxième partie de l'article. div de votre chaîne de caractères en utilisant Mojo::DOM de la manière suivante :

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/;
}

Sortie :

blu blu GOLD blu

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X