Regulaerer Ausdruck

Hallo,

ich finde hier in einem kleinen Perl-Programm folgenden Regulaeren Ausdruck:

$zwtext =~ s/\s+\z//;

Den ich nicht verstehe. Kann mir da jemand weiterhelfen was er bedeutet?

Soviel weiss ich schon:
Suche und ersetze bzw. entferne in diesem Fall
\s Leer und Steuerzeichen

  • ein oder mehrmaliges Vorkommen von \s

aber mit dem \z kann ich garnichts anfangen und finde es auch nicht in den Beschreibungen zu den regulaeren Ausdruecken.

Kann mir da jemand weiterhelfen?

Chris

Hi Chris,

das \z wird in diesem Fall ein kleines ‚z‘ matchen; mit dem Escape-Zeichen Backslash wird das nachfolgende Zeichen literal übernommen -auch dann wenn es innerhalb einer RE eine Sonderbedeutung hätte; die Eigenschaft ‚Sonderbeutdeutung‘ ist aber kein Muss.

Der Ausdruck entfernt (ersetzt sie durch einen Leerstring) also aus dem String eine (nichtleere) Folge von Spaces (\s+) gefolgt von einem einzelnen z - wozu auch immer das gut sein soll, das muss dir schon der Autor sagen.

gruss
b.

Hallo,

ich finde hier in einem kleinen Perl-Programm folgenden
Regulaeren Ausdruck:

$zwtext =~ s/\s+\z//;

ich finde hier in einem kleinen Perl-Programm folgenden
Regulaeren Ausdruck:

$zwtext =~ s/\s+\z//;

das \z wird in diesem Fall ein kleines ‚z‘ matchen; mit dem
Escape-Zeichen Backslash wird das nachfolgende Zeichen literal
übernommen -auch dann wenn es innerhalb einer RE eine
Sonderbedeutung hätte; die Eigenschaft ‚Sonderbeutdeutung‘
ist aber kein Muss.
Der Ausdruck entfernt (ersetzt sie durch einen Leerstring)
also aus dem String eine (nichtleere) Folge von Spaces (\s+)
gefolgt von einem einzelnen z - wozu auch immer das gut sein
soll, das muss dir schon der Autor sagen.

escaped der backslash nicht nur meta characters? z ist keiner.

http://perldoc.perl.org/perlre.html

Assertions
Perl defines the following zero-width assertions: 
...
 \z Match only at end of string
1 Like

ich finde hier in einem kleinen Perl-Programm folgenden
Regulaeren Ausdruck:

$zwtext =~ s/\s+\z//;

aber mit dem \z kann ich garnichts anfangen und finde es auch
nicht in den Beschreibungen zu den regulaeren Ausdruecken.

siehe http://perldoc.perl.org/perlre.html

im gegensatz zum dollarzeichen, welches das „ende“ eines strings matcht, was aber auch direkt vor einem newline matchen kann, matcht \z das „echte“ ende eines strings.
es soll also sichergestellt sein, das wirklich bis zum ende gelöscht wird.

ist in dem fall aber eigentlich nicht notwendig, da \s+ auch schon newlines mit einschliesst.

Ist spät, aber hilfreich.

Google nach „The Regex Coach“. Erster Link.

Testet Deine Exen und hilft verstehen, da er Fe_ler nicht verzeiht.