Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Extraction d'une chaine

4 réponses
Avatar
kurtz le pirate
Bonsoir,

Je dois être fatigué ce soir... je ne comprends pas pourquoi je n'arrive
pas à extraire une chaine.

J'ai du texte dans une variable obtenue par :
my $page = getprint('http://xxxxxxxxxxx') or die 'Unable to get page';

Un extrait du contenu de $page :
...
6HwySTmdYJp2dpaWKEregYrVfn9/B0xkD2U6+e+sOaHqImTfLrycUOIZM1hJwC3oemPXbi/y5PnsrJ136bUa8pxu69BklmANWwDRkgR1wmwVaglyi3Nz6JLQ+ZG5NxQsgNdAhmIfJN7wxgoWg9fxzPQ+c/g9YAIXgeUKCyipJO4uR/wswAOIwB/5IgxvbAAAAAElFTkSuQmCC"
alt="PHP logo" /></a><h1 class="p">PHP Version 5.6.36</h1>
</td></tr>
</table>
<table>
<tr><td class="e">System </td><td class="v">Linux
node04.cluster1.easy-hebergement.net 4.4.111-cluster-lts #1 SMP Wed Jan
10 14:53:24 UTC 2018 x86_64 </td></tr>
<tr><td class="e">Build Date </td><td class="v">May 13 2018 14:24:33
</td></tr>
<tr><td class="e">Configure Command </td><td class="v">
&#039;./configure&#039; &#039;--prefix=/opt/php56&#039;
...

Je veux récupére le "Linux node04.cluster1.easy-hebergement.net
4.4.111-cluster-lts #1 SMP Wed Jan 10 14:53:24 UTC 2018 x86_64".

Je fais :
my $val = $page =~ m/<tr><td class="e">System <\/td><td
class="v">(.*)<\/td><\/tr>/;
print "--> $val\n";

... et $val est vide.

Je teste avec les mêmes choses sur <https://regex101.com/> et sur
<https://www.myregextester.com/>, j'ai bien le match dans group1.


Vous voyez ou je me trompe ?
Merci



--
kurtz le pirate
compagnie de la banquise

4 réponses

Avatar
Nicolas George
kurtz le pirate , dans le message
<5e67cae8$0$5877$, a écrit :
my $val = $page =~ m/<tr><td class="e">System </td><td
class="v">(.*)</td></tr>/;
print "--> $valn";
... et $val est vide.

Déjà, pour récupérer une capture, il faut un contexte liste :
my ($val) = ...
Mais si ça avait marché, tu aurais $val = 1, ce qui n'est pas le cas.
Ici, il faudrait simplifier la regexp jusqu'à trouver quel bout ne
trouve pas.
Avatar
kurtz le pirate
On 10/03/2020 21:26, Nicolas George wrote:
kurtz le pirate , dans le message
<5e67cae8$0$5877$, a écrit :
my $val = $page =~ m/<tr><td class="e">System </td><td
class="v">(.*)</td></tr>/;
print "--> $valn";
... et $val est vide.

Déjà, pour récupérer une capture, il faut un contexte liste :
my ($val) = ...
Mais si ça avait marché, tu aurais $val = 1, ce qui n'est pas le cas.
Ici, il faudrait simplifier la regexp jusqu'à trouver quel bout ne
trouve pas.

oui, déjà le contexte liste...merci
--
kurtz le pirate
compagnie de la banquise
Avatar
kurtz le pirate
On 11/03/2020 15:10, kurtz le pirate wrote:
Pour info et comme je ne m'en sors pas avec LWP::Simple et getprint(),
je suis parti sur une autre méthode :
my $url = 'http://xxxxxxxxxxxxxx';
my $html = qx{wget --quiet --output-document=- $url};
if ($html =~ m/System </td><td class="v">(.*)</td>/) {
print ">> $1 <<n";
}
Il semblerait donc que getprint() renvoi des données... pas exploitables
directement :(
Ca fonctionne comme ça. Cela me suffit.
--
kurtz le pirate
compagnie de la banquise
Avatar
Nicolas George
kurtz le pirate , dans le message
<5e6a6dd6$0$21591$, a écrit :
Il semblerait donc que getprint() renvoi des données... pas exploitables
directement :(

Si la seule différence avec get est que ça fait un print en plus, alors
je n'ai pas la même expérience.