Je connais le? L'opérateur permet le mode "non gourmand", mais je rencontre un problème, je n'arrive pas à me déplacer. Considérons une chaîne comme ceci:Problèmes de rapprochement les plus courts
my $str = '<a>sdkhfdfojABCasjklhd</a><a>klashsdjDEFasl;jjf</a><a>askldhsfGHIasfklhss</a>';
où il y a des balises d'ouverture et de fermeture <a>
et </a>
, il y a des touches ABC, DEF et GHI mais sont entourés par un autre texte aléatoire. Je veux remplacer le <a>klashsdjDEFasl;jjf</a>
par <b>TEST</b>
par exemple. Cependant, si j'ai quelque chose comme ça.
$str =~ s/<a>.*?DEF.*?<\/a>/<b>TEST><\/b>/;
Même avec les opérateurs non avides * ?, cela ne fait pas ce que je veux. Je sais pourquoi il ne le fait pas, parce que la première <a>
correspond à la première occurrence de la chaîne, et correspond à tout le chemin jusqu'à DEF, puis correspond à la plus proche fermeture </a>
. Ce que je veux cependant est un moyen de faire correspondre l'ouverture la plus proche <a>
et la fermeture </a>
à "DEF" si. Donc, actuellement, je reçois cela comme le résultat:
<a>TEST</b><a>askldhsfGHIasfklhss</a>
Où que je cherche quelque chose pour obtenir ce résultat:
<a>sdkhfdfojABCasjklhd</a><b>TEST</b><a>askldhsfGHIasfklhss</a>
D'ailleurs, je ne suis pas en train d'analyser HTML ici, je sachez qu'il existe des modules pour le faire, je demande simplement comment cela pourrait être fait.
Merci, Eric Seifert
Merci, c'est exactement ce que je cherchais. –