this is not working

here is an example of my file and I just want to replace with one
regexp

in file1 ddd ddd dddd by the value stored in my hash table
in file2 all d
in file3 not the first d; but all the others      which is preceed by
WORD;

in all files
not replacing block like that d;d;dd
not replacing the 2 in WORD/WORD2;

file1
WORD/WORD2;                         d;d;dd;    d;d;dd;  d;d;d;
d;d;d;   ddd  ddd  ddd  ddd  dddd
WORD/WORDWORD1/WORD1;  d;d;dd;    d;d;dd;  d;d;d;  d;d;d;   ddd  ddd
ddd  ddd  ddddd

file2
WORD;  d;  dd;  dd;  dd;  d;  d;  d;  dd;  dd;  d;  ddd;  ddd;  ddd;
ddd;  ddd;  dddd;


file3
WORD/WORD1;  d;   d;  ddd;  dddd;


Thanks Rob if you can help


On 1 juil, 19:46, [EMAIL PROTECTED] (Rob Dixon) wrote:
> nico io wrote:
>
> > I have wrote this :
> > s/(?<![0-9A-Za-z;])(\d+)(?!(\;\d+|\d+|\;\s+\d+\;\d+))/$hashTable{$1}/g
>
> > it works but when a number is not as a key of the hash table it replace
> > the numer by nothing.
>
> > I would like to let the number if it doesn't belong to my hash table,
> > how can I do ?
>
> Please keep your posts confined to the perl.beginners group so that others can
> both help and be helped by your questions.
>
> Please bottom-post your responses to the perl.beginners group so that extended
> threads remain comprehensible. Thank you.
>
> You should always put
>
>   use strict;
>   use warnings;
>
> at the start of your program, which would have given you a warning when 
> missing
> keys were substituted.
>
> Your regex isn't clearly thought-out. For instance
> /(\d+)(?!(\;\d+|\d+|\;\s+\d+\;\d+)/ says that the string can't be followed by 
> a
> semicolon and digits, or just digits, or a semicolon and whitespace and 
> digits.
> Because (/d+) is greedy and will consume all the digits available there is no
> need to specify anything other than /(\d+)(?!;)/.
>
> You can stop missing keys being substituted by making your replacement string 
> an
> expression. This should do what you want:
>
>   $str =~ s/(?<![A-Z;])(\d+)(?!;)/ exists $hash{$1} ? $hash{$1} : $1 /gei;
>
> HTH,
>
> Rob


--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to