Norbert Kölln: Kopfnuss: Regulärer Ausdruck gesucht

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

  1. 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!

    1. 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