Schrift
[thread]11248[/thread]

Anfänger-Problem: Trailing \ in Regex

Leser: 1


<< >> 4 Einträge, 1 Seite
Gast Gast
 2008-02-05 18:48
#105598 #105598
Hallo,
ich hab folgendes Problem: Ich habe einen Hash und einen Text, in dem ich Zeichen(folgen), die Schlüssel des Hashes sind durch die zugehörigen Werte ersetzen will. Das funktioniert soweit:
Code (perl): (dl )
1
2
3
4
5
6
%dictHash=('A','4','M','///','N','\\\\','W','\\\\\\'); #ein Auszug
@dictkeys=sort(keys(%dictHash));
foreach (@dictkeys)
{
        $_[1]=~s/$_/$dictHash{$_}/g;
}

Wenn ich das dann aber wieder zurückübersetzen will mit
Code (perl): (dl )
1
2
3
4
5
6
my %revHash= reverse %dictHash;
my @revKeys=keys(%revHash);
foreach(@revKeys)
{
        $_[1]=~s/$_/$revHash{$_}/g;
}

wirft mir der Perl-Interpreter "Trailing \ in regex m/\\\/". Was kann ich da machen? ~Ich bin dankbar für Vorschläge
moritz
 2008-02-05 20:57
#105601 #105601
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
s/\Q$_\E/$revHash{$_}/g;

Oder
Code (perl): (dl )
1
2
my $re = join '|', map { quotemeta $_ } keys %revHash;
$_[1] =~ s/($re)/$revHash{$1}/g;
murphy
 2008-02-05 21:00
#105602 #105602
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Da Du in den interpolierten Variablen rohe Stringdaten und keine regulären Ausdrücke vorliegen hast, musst Du sie quoten:
Code (perl): (dl )
$_[1]=~s/\Q$_\E/$revHash{$_}/g;

When C++ is your hammer, every problem looks like your thumb.
Gast Gast
 2008-02-06 14:22
#105631 #105631
Vielen Dank, das hat meine Kenntnisse erweitert :)
<< >> 4 Einträge, 1 Seite



View all threads created 2008-02-05 18:48.