regexpr et /m

Le
kurtz le pirate
bonsoir,

je lis tout un fichier d'un seul coup (undef $/) dans un scalaire qui
contient donc des retours à la ligne. si je veux faire des remplacements
sur plusieurs lignes (donc utiliser s///m), dois-je mettre des
'' dans l'expression ?

j'ai des comportements bizzares.

--
klp
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Dam
Le #143340
On 25 avr, 19:58, kurtz le pirate
bonsoir,

je lis tout un fichier d'un seul coup (undef $/) dans un scalaire qui
contient donc des retours à la ligne. si je veux faire des remplacements
sur plusieurs lignes (donc utiliser s/.../.../m), dois-je mettre des
'n' dans l'expression ?

j'ai des comportements bizzares.

--
klp


des r non?

Dam
Le #143339
On 25 avr, 19:58, kurtz le pirate
bonsoir,

je lis tout un fichier d'un seul coup (undef $/) dans un scalaire qui
contient donc des retours à la ligne. si je veux faire des remplacements
sur plusieurs lignes (donc utiliser s/.../.../m), dois-je mettre des
'n' dans l'expression ?

j'ai des comportements bizzares.

--
klp


r ?

Paul Gaborit
Le #143338
À (at) Wed, 25 Apr 2007 19:58:51 +0200,
kurtz le pirate
bonsoir,

je lis tout un fichier d'un seul coup (undef $/) dans un scalaire qui
contient donc des retours à la ligne. si je veux faire des remplacements
sur plusieurs lignes (donc utiliser s/.../.../m), dois-je mettre des
'n' dans l'expression ?


Le modificateur /m agit sur la signification de "^" et de
"$". Normalement c'est début de chaîne et fin de chaîne. Avec /m,
c'est début et fin de ligne (dans la chaîne éventuellement
multi-lignes).

Le modificateur /s agit sur la signification de ".". Normalement, le
"." reconnaît n'importe quel caractère sauf un passage à la
ligne. Avec /s, le "." reconnaît aussi le passage à la ligne.

Ensuite, si vous souhaitez reconnaître explicitement un passage à la
ligne, vous pouvez utiliser "n".

--
Paul Gaborit - Perl en français -
Vincent Lefevre
Le #143337
Dans l'article Dam
On 25 avr, 19:58, kurtz le pirate
bonsoir,

je lis tout un fichier d'un seul coup (undef $/) dans un scalaire qui
contient donc des retours à la ligne. si je veux faire des remplacements
sur plusieurs lignes (donc utiliser s/.../.../m), dois-je mettre des
'n' dans l'expression ?



Que tu utilises le modifieur m ou non, tu dois mettre n (ou quelque
chose qui le remplace, comme s je suppose) dans l'expression pour un
pattern sur plusieurs lignes. En revanche, si tu utilises le modifieur
s, tu peux t'en dispenser si tu utilises "." (man perlre).

des r non?


Non.

--
Vincent Lefèvre 100% accessible validated (X)HTML - Blog: Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)


Nicolas George
Le #143336
Paul Gaborit wrote in message
"$". Normalement c'est début de chaîne et fin de chaîne.


Pour $, c'est fin de chaîne ou juste avant un n à la fin de la chaîne.
C'est traître, parfois.

Paul Gaborit
Le #143335
À (at) 26 Apr 2007 11:41:31 GMT,
Nicolas George
Paul Gaborit wrote in message
"$". Normalement c'est début de chaîne et fin de chaîne.


Pour $, c'est fin de chaîne ou juste avant un n à la fin de la chaîne.
C'est traître, parfois.


C'est vrai qu'il faut le préciser. C'est traitre quand on ne le sait
pas. Mais c'est très pratique pour éviter l'emploi de 'chomp'.

--
Paul Gaborit - Perl en français -

kurtz_le_pirate
Le #143334
"Paul Gaborit" de news:

À (at) Wed, 25 Apr 2007 19:58:51 +0200,
kurtz le pirate
bonsoir,

je lis tout un fichier d'un seul coup (undef $/) dans un scalaire
qui
contient donc des retours à la ligne. si je veux faire des
remplacements
sur plusieurs lignes (donc utiliser s/.../.../m), dois-je mettre
des
'n' dans l'expression ?


Le modificateur /m agit sur la signification de "^" et de
"$". Normalement c'est début de chaîne et fin de chaîne. Avec /m,
c'est début et fin de ligne (dans la chaîne éventuellement
multi-lignes).

Le modificateur /s agit sur la signification de ".". Normalement, le
"." reconnaît n'importe quel caractère sauf un passage à la
ligne. Avec /s, le "." reconnaît aussi le passage à la ligne.

Ensuite, si vous souhaitez reconnaître explicitement un passage à la
ligne, vous pouvez utiliser "n".


hum... hum... toujours pas clair pour moi :((
en fait je n'ai pas besoin de reconnaitre explicitement le retour à la
ligne.
pour faire simple, j'ai des fichiers du genre :
...
[section1]
adresseIp=1.2.3.4
...
[section14]
adresseIp=1.2.3.4
...
...
...
[section5]
adresseIp.100.52.41
...
...

je veux changer : [section14]nadresseIp=1.2.3.4n
par : [section14]nadresseIp.13.14.15ntoto=5n

->
s/[section14]nadresseIp=1.2.3.4n/[section14]nadresseIp.13.14.15ntoto=5n/m

--
klp


Jean-Baptiste Mazon
Le #143333
"kurtz_le_pirate"
je veux changer : [section14]nadresseIp=1.2.3.4n
par : [section14]nadresseIp.13.14.15ntoto=5n

->
s/[section14]nadresseIp=1.2.3.4n/[section14]nadresseIp.13.14.15ntoto=5n/m


Sinon que les crochets de la partie "pattern" doivent être échappés
( [section14] ), ça marche chez moi (TM). Le modificateur `m' est
d'ailleurs superflu pour ladite substitution.

kurtz le pirate
Le #143230
In article Jean-Baptiste Mazon
"kurtz_le_pirate"
je veux changer : [section14]nadresseIp=1.2.3.4n
par : [section14]nadresseIp.13.14.15ntoto=5n

->
s/[section14]nadresseIp=1.2.3.4n/[section14]nadresseIp.13.14.15ntoto > > 5n/m


Sinon que les crochets de la partie "pattern" doivent être échappés
( [section14] ), ça marche chez moi (TM). Le modificateur `m' est
d'ailleurs superflu pour ladite substitution.


oui, j'ai tappé un peu vite. il faut le [, mais pas le ].

sinon, ça prouve bien que je n'ai pas encore compris le /m :(


merci
--
klp


Klaus
Le #143229
On Apr 25, 7:58 pm, kurtz le pirate
bonsoir,

je lis tout un fichier d'un seul coup (undef $/) dans un scalaire qui
contient donc des retours à la ligne. si je veux faire des remplacements
sur plusieurs lignes (donc utiliser s/.../.../m), dois-je mettre des
'n' dans l'expression ?


ça dépend, voir http://perl.enstimac.fr/DocFr/perlre.html

j'ai des comportements bizzares.


Merci de donner un exemple programme perl (court mais complet avec un
fichier DATA et la commande s/.../.../m) qui montre le comportement,
par exemple:

use strict;
use warnings;
$/ = undef;
my $multi_ligne = <DATA>;
print "Avant : ", unpack('H*', $multi_ligne), "n
n";
print "Opération: s/^B/Z/mnn";
$multi_ligne =~ s/^B/Z/m;
print "J'espère le résultat : 410a5a0a430an";
print "Voici le résultat obtenu: ", unpack('H*', $multi_ligne), "n";
__DATA__
A
B
C


--
Klaus

Publicité
Poster une réponse
Anonyme