Regex, wie gehts?
Andi123
- perl
Ich moechte von einer Nummer, wenn bei dieser nach einer beliebigen Anzahl von Nullen eine 3,4,5 oder 6 folgt, diese folgende Ziffer auch durch eine Null ersetzen.
Dazu wollte ich diesen Befehl nehmen:
$k=~s/(^0*)3|4|5|6/$10/;
Nur geht das nicht, da PERL ja nicht $1 und '0' einsetzt, sondern die Variable '$10' als Ersatz nimmt.
Ist diese leer,ist der ganze Anfang des Strings weg.
Funktionieren tut aber z.b.:
$k=~s/(^0*)3|4|5|6/$1 0/;
Nur habe ich jetzt in der Zahl ein Leerzeichen.
Das will ich auch nicht (okay, ich koennte das dann auch wieder rausnehmen).
Aber gibt es nicht einen Weg, wie ich das erledigen kann, ohne den Umweg, das zusaetzliche Zeichen wieder einzusetzen?
Danke Andi
Hoi,
$k=~s/(^0*)3|4|5|6/$10/;
Nur geht das nicht, da PERL ja nicht $1 und '0' einsetzt, sondern die
Variable '$10' als Ersatz nimmt.
$k =~ s/^(0*)[3456]/${1}0/;
Gruesse,
CK
$k =~ s/^(0*)[3456]/${1}0/;
Danke.
Kannst du mir auch sagen, wieso es funktioniert?
Andi
Hallo,
$k =~ s/^(0*)[3456]/${1}0/;
Danke.
Kannst du mir auch sagen, wieso es funktioniert?
Sorry, ich dachte, das waere klar. Nunja, statt '3|4|5|6' kannst du auch eine
Zeichenklasse verwenden. Die Oder-Zeichen sind IMHO nur sinnvoll, wenn man eine
Alternative mit mehr als einem Zeichen haben moechte. Das '${1}' ist ein
"Feature" von Perl (andere werden sagen, es versaut den Programmierstil): man
kann Variablen auch mit ${name} anreden. Das fuehrt in normalen Faellen zu
Problemen in Verbindung mit 'use strict', aber in diesem Fall geht das, weil
die Variable ($1) schon definiert ist.
Gruesse,
CK
Hallo,
Eine kleine Anmerkung noch:
Variablen können in Perl immer als ${varname} angegeben werden (was ursprünglich aus Unix-Shellscripts stammt). Das ist eigentlich immer dann unumgänglich, wenn der Variablen direkt ein Text folgt. So wie eben "${1}0" oder zB "${Self}Html".
Probleme mit "use strict" gibt es nicht - ${varname} ist 'Perl-handelsübliche' Syntax und nichts Spezielles.
Good luck
Manfred
Hallo Manfred,
Probleme mit "use strict" gibt es nicht - ${varname} ist 'Perl-handelsübliche'
Syntax und nichts Spezielles.
Was ich damit sagen wollte, war, dass es sehr schnell passieren kann, dass man
Probleme bekommt, wenn man statt einem konstanten String eine Variable benutzt:
ckruse@waylander:~$ perl -Mstrict -e 'my $var = ""; my $var1 = "var"; print ${$var1},"\n";'
Can't use string ("var") as a SCALAR ref while "strict refs" in use at -e line 1.
ckruse@waylander:~$
Gruesse,
CK
Hi Christian,
Das '${1}' ist ein "Feature" von Perl (andere werden sagen, es versaut
den Programmierstil): man kann Variablen auch mit ${name} anreden.
soweit ich das glaube verstanden zu haben, ist Perl doch irgendwie die
Obermenge von sed, awk und diversen Shells - wahrscheinlich nicht nur
semantisch, sondern in weiten Teilen auch syntaktisch.
Und ${name} ist z. B. ein Element der Korn-Shell-Syntax.
Viele Grüße
Michael