Reg. Ausdruck - Blackout nach 11 Stunden Arbeit
Waldi
- perl
Hallo,
ich bin am Verzweifeln,
ich wollte heute noch mit dem Progrämmchen fertig werden und jetzt hängt es an einem banalen regulären Ausdruck.
Ich wollte führende und nachfolgend Leerstellen aus einem Feld entfernen mit
$feld1 =~ /^ *(! .*! ) */;
$feld1 = $1;
Meine Überlegung war "beliebig viele Leerstellen am Anfang, dann der gesuchte String beginnend mit Nichtleerzeichen, gefolgt von beliebigen Zeichen und endend mit einem Nichtleerzeichen. Danach beliebig viele Leerzeichen.
Leider funktioniert es so nicht.
Ich würde mich freuen, wenn ich heute noch die Lösung bekäme - sonst halt morgen.
Danke
Waldi
$feld1 =~ /^ (! .! ) */;
$feld1 = $1;
Was meinst Du, welche Bedeutung das Ausrufezeichen in einer RE hat?
Was meint die Perl-Doku, welche Bedeutung das Ausrufezeichen in einer RE hat?
Ersetze die Leerzeichen am Anfang durch \*gar nichts\*, ersetze die Leerzeichen am Ende durch \*gar nichts\*. Das ist wesentlich einfacher zu formulieren und birgt nicht das Risiko, das $feld1 undefiniert wird wie in Deinem Code.
Alexander
Hi
ich weiß nicht ob ich dein problem verstanden habe aber leerzeichen am anfang und ende kann auch:
trim -- Entfernt Whitespaces (oder andere Zeichen) am Anfang und Ende eines Strings
MFG Hageb
Sorry trim war php ich nehm alles zurück...
Hallo,
Ich wollte führende und nachfolgend Leerstellen aus einem Feld entfernen mit
ist $text =~ s/^\s+|\s+$//; nicht das, das du suchst?
Markus
Hallo,
Ich wollte führende und nachfolgend Leerstellen aus einem Feld entfernen mit
ist $text =~ s/^\s+|\s+$//; nicht das, das du suchst?
Das funktioniert, wenn nur führende oder nur nachfolgende Leerstellen vorhanden sind, nicht aber, wenn vorne und hinten Leerstellen vorhanden sind.
Gruss Waldi
ist $text =~ s/^\s+|\s+$//; nicht das, das du suchst?
Das funktioniert, wenn nur führende oder nur nachfolgende Leerstellen vorhanden sind, nicht aber, wenn vorne und hinten Leerstellen vorhanden sind.
Verwende den g-Modifier und alles wird gut.
Siechfred
Hi,
ist $text =~ s/^\s+|\s+$//g; nicht das, das du suchst?
$text =~ s/^\s+//;
$text =~ s/\s+$//;
Laut "Mastering Regular Expressions", 2nd Edition, von Jeffrey E.F. Friedl, S. 199 ist Deine Variante etwa 4 mal so langsam wie die Variante mit den 2 einzelnen Ersetzungen (wegen der top-level alternation fallen Optimierungsmöglichkeiten weg, der g-Modifier, ...)
Er rät an der Stelle davon ab, andere Varianten zu verwenden als die mit den 2 Ersetzungen, da sie zwar genauso effektiv, aber weniger effizient sind.
cu,
Andreas