|
|
|
|
Bonjour à tous . . . :D
voilà j'expose direct le problème :
j'ai un fichier avec a plusieurs endroit :
coucou@art[L. 125-65]blablablahh coucou@art[L. 15-5-3]blablablahh et autres du genre...
J'ai déjà trouvé ça :
while ($ligne = <>)
{
if($ligne=~m/@art\[([^\]]+)\]/) #si je trouve @art[contenu] dans ma ligne.je traite le contenu
{
$inter=$1; #POUR les tests
$ligne="+$inter+ $ligne"; #POUR les tests
}
print ("$ligne");
}
Je trouve donc correctement les ligfnes ou mon occurence est présente mais le problème est qu'il y a des fois ou mon occurence est présente plusieurs fois dans la ligne . . . et avec ce script je trouve que la première occurence . . . Voilà, j'attend xD une bonne âme ki m'aide . . Zep3k!GnO -->kurtis jackson:"Dans la vie tu as besoin de 3 choses : le fitness, l'aérobic et moi." |
Merci mais avec le g ça ne change rien . . .
|
Re,
if ( @val = $mot =~ /test/gi ) {# contexte liste
printf "Test trouver de %d fois.\n",scalar @val;
}
======================================= while ( $val =~ /t/gi ) { # contexte scalaire
printf "t ou T dans la position %d.\n",pos($val) -1;
}
s/// Dans ce cas s///g actionne comme un recherch/remplecement global qui modifie tout d'un coup et il ne fait pas de détection progressive en contexte scalaire. |
Une autre possibilité c'est d'utiliser un test avant qui ne consomme pas de texte, comme ça tu ne fais q'une seule capture.
#! /usr/bin/perl
use warnings;
while (<>)
{
s/\b(?= # teste avant si on a
\w+\@art # coucou@art
\[ # a partir de [
( # on capture ce que nous interesse dans $1
[^\]]+
)
\]
)\b
/+$1+ /xg; # on ajoute $1 avant coucou @art[contenu] dans ma ligne
print;
} |