PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit Hashes und RegEx


freeze
01.06.2005, 13:10
Hey @all,

ich habe da ein Problem mit einer Funktion:

sub parseAliasAndPush { # Hier werden die Schlüssel und Werte zugewiesen.
my $text = shift;

$text = &parseTextStart($text);
if($text =~ /.+?key=(['"])(.+?)\1\svalue=(['"])(.+?)\3/) {
$vars{$2} = $4;
}
};

sub parseText {
my $text = shift;

foreach (keys %vars) {
print "Key: >>$_<<;\nValue: >>" . $vars{$_} . "<<\nText: >>$text<<\n";
if($text =~ /$vars{$_}/ || $text =~ /$_/ ||
$text =~ /$v/ || $text =~ /$k/) {
print "Vorher: >>$text<<\n";
$text =~ s/$_/$vars{$_}/g;
print "Nachher: >>$text<<\n";
}
else {
print "SCHLUESSEL WURDE NICHT GEFUNDEN!\n";
}
print "------------------------------------\n";
}
return $text;
};



Warum ersetzt er mir in der Funktion "parseText" nicht den Text?
Wenn ich mir den key und die dazugehörigen Wert ausgeben lasse funktioniert es, jedoch funktioniert es nicht, wenn ich es in einem Text ersetzen möchte.

Lg freeze


Jan Krüger
01.06.2005, 23:36
Dass beim Verwenden von Variablen in regulären Ausdrücken darin enthaltene Spezialzeichen von regulären Ausdrücken mitinterpretiert werden, ist dir bekannt?

freeze
02.06.2005, 08:34
OK, habe das Problem schon behoben, es lag ganz woanders, und zwar hatte ich die Variablen in der Datei beispielsweise wie folgt:
<data key="$DIR$" value="/home/user"/>
Er hat anscheinend das $ Symbol falsch interpretiert, nachdem ich dann % anstatt von $ verwendete funktionierte das Skript wieder.
<data key="%DIR%" value="/home/user"/>

Vielen Dank
Lg freeze

freeze
28.07.2006, 13:10
Bezüglich dieser Thematik....


Wenn ich nun Text erhalte in dem $VAR$ vorkommt, wie bringe ich es doch zustande das dieser in einem RegEx als Text und nicht als Variable verstanden wird?

Ich bekomme folgenden String:
$VAR$ = "Test"

Danach kommt Beispielsweise ein Text

Das ist ein $VAR$ Text


Und daraus soll er dann eben

Das ist ein Test Text

machen.

Lg freeze

butterkeks
28.07.2006, 13:58
afaik wird der letzte Abschnitt vom s/// Operator wie ein String mit Doppelquotes aufgelöst

Jan Krüger
30.07.2006, 15:18
So?
s/\$VAR\$/Test/