habe da ein kleines Problem mit Steuerzeichen und Spaces:
Zunaechst muss ich aus einem Text alle Steuerzeichen entfernen. Die muss ich durch Spaces ersetzen, weil sonst einige Woerter einfach zusammen geschrieben werden (Zeilenumbruch). Das scheint auch zu klappen:
$zwfile =~ s/[\n\r\f\t]/ /g;
Aber dann muss ich alle Steuerzeichen und Spaces am Ende der Zeile entfernen. Und das klappt nicht. Da bleiben immer einige Spaces uebrig
$zwfile =~ s/[\s]$//g;
Aber \s steht doch fuer Steuerzeichen und Spaces - Oder?
Aber dann muss ich alle Steuerzeichen und Spaces am Ende der
Zeile entfernen. Und das klappt nicht. Da bleiben immer einige
Spaces uebrig
$zwfile =~ s/[\s]$//g;
$ matcht nur ein Dollarzeichen, das willst du sicher nicht.
$ matcht das Ende des Strings, nicht das Zeilenende - ausser du benutzt den /m-Modifier:
$zwfile =~ s/\s+$/ /mg
Aber \s steht doch fuer Steuerzeichen und Spaces - Oder?
Nur für „whitespaces“, Steuerzeichen wie \a (alarm bell) sind da nicht dabei. Wenn du Steuerzeichen matchen willst, geht das mit \P{isPrint} oder [^[rint:]].
Aber dann muss ich alle Steuerzeichen und Spaces am Ende der
Zeile entfernen. Und das klappt nicht. Da bleiben immer einige
Spaces uebrig
$zwfile =~ s/[\s]$//g;
Aber \s steht doch fuer Steuerzeichen und Spaces - Oder?
\s steht für Whitespaces. Um mehrere Whitespaces am Ende zu entfernen,
musst du den Quantifier + hinzufügen, sonst wird nur eins entfernt.
Die Klammern um das \s sind übrigens auch nicht nötig. Und das $
am Ende ist bestimmt auch ein Fehler, oder?
$string =~ s/\s+\z//;
Das entfernt mehrere Whitespaces \s+ am Ende des Strings \z.
Schau mal in perldoc perlre, da steht der Unterschied zwischen \z und $.