Kopfnuss: Regulärer Ausdruck gesucht
Norbert Kölln
- perl
Moin, moin!
Ich habe einen String, in dem ich Daten verstecke, z. B.
$string="Attila Hermine Astrid Otto Hendrik";
den ich mit EINEM regulären Ausdruck in die Form
$string="test98";
bringen möchte.
Zur Erklärung: Der String enthält nach der Umformung nur noch jeweils den zweiten Buchstaben eines jeden Wortes, der letzte dieser Buchstaben wurde durch seinen ASCII-Wert ersetzt.
Den ersten Teil (alles rausschmeissen außer den jeweils zweiten Buchstaben) habe ich wie folgt gelöst:
$string=~s/\b.(.).*?( |$)/$1/g;
So komme ich zum Ergebnis "teste". Wie aber ändere ich den regulären Ausdruck so, das er anstelle des letzten Buchstabens "e" dessen Wert "98" einsetzt?
Vielleicht nimmt jemand diese Fragestellung mit in den Feierabend und knobelt eine Lösung aus. Ich werde mich auch dransetzen und hier morgen nach anderen Lösungsvorschlägen sehen.
Bis dann,
Norbert
hi!
$string="Attila Hermine Astrid Otto Hendrik";
$string="test98";
Zur Erklärung: Der String enthält nach der Umformung nur noch
jeweils den zweiten Buchstaben eines jeden Wortes, der letzte
dieser Buchstaben wurde durch seinen ASCII-Wert ersetzt.
Das kapiere ich dann noch nicht so ganz, denn 98 ist der ASCII-Wert
für das 'b', der für 'e' ist 101.
Den ersten Teil (alles rausschmeissen außer den jeweils zweiten
Buchstaben) habe ich wie folgt gelöst:
$string=~s/\b.(.).*?( |$)/$1/g;
So komme ich zum Ergebnis "teste". Wie aber ändere ich den
regulären Ausdruck so, das er anstelle des letzten Buchstabens
"e" dessen Wert "98" einsetzt?
$string =~ s/(.)$/ord $1/e;
Man darf in Perl auch mehrere Anweisungen hintereinander ausführen,
muss also nicht alles in eine Zeile quetschen. Daher wandelst du den
letzten Buchstaben am besten in einer eigenen Anweisung in seinen
ASCII-Wert um.
Vielleicht nimmt jemand diese Fragestellung mit in den Feierabend
und knobelt eine Lösung aus. Ich werde mich auch dransetzen und
hier morgen nach anderen Lösungsvorschlägen sehen.
Naja, wenn ich über sowas 'ne ganze Nacht knobeln müsse... ;)
bye, Frank!
Moin, Frank!
Du hast Recht, mir ist beim Abschreiben ein Fehler unterlaufen, ich habe im Beispielstring b und e verwechselt.
Das Flag "e" bei regulären Ausdrücken war mir bisher nicht bekannt. Damit komme ich jetzt vielleicht weiter. Denn eine Aufsplittung in zwei Anweisungen war mir schon gelungen, ich möchte aber weiterhin das ganze mit einem regulären Ausdruck hinkriegen.
Vielen Dank für die Hilfe!
Norbert