Schrift
[thread]10573[/thread]

RegEx: 3 Leerzeichen entfernen

Tags: Ähnliche Threads

Leser: 2


<< >> 6 Einträge, 1 Seite
pixelflat
 2007-10-15 10:13
#100807 #100807
User since
2007-09-13
15 Artikel
BenutzerIn
[default_avatar]
Hallo,
ich hab ein seltsamen Problem:

Ich will bei einem String am Ende genau 3 Leerzeichen entfernen.
Das funktioniert auch:
Code (perl): (dl )
1
2
3
$line_old=~s/ $//;
$line_old=~s/ $//;
$line_old=~s/ $//;


Leider ist das ja ziemlich dumm, 3x die gleiche Zeile zu schreiben. Deshalb dachte ich, ich könnte es abkürzen:
Code (perl): (dl )
$line_old=~s/ {3}$//;


Leider funktioniert das nicht. Er entfernt nur 1 Leerzeichen... Oo
Muss ich um das Leerzeichen Klammern, Anführungszeichen setzen?
Oder ist die Syntax von -{} so komplett falsch?

PS: Habe es auch schon mir 'g' am Ende versucht...

Danke
renee
 2007-10-15 10:16
#100808 #100808
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das funktioniert schon... Ich habe es gerade getestet... Welche Perl-Version benutzt Du?
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pixelflat
 2007-10-15 10:21
#100809 #100809
User since
2007-09-13
15 Artikel
BenutzerIn
[default_avatar]
Hm, eigentlich schon eine aktuelle...
Wo kann ich die Version auslesen?

//Edit:
Seh grad was von 5.8 im ChangeLog.
renee
 2007-10-15 10:25
#100810 #100810
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Da sollte es auf jeden Fall funktionieren. Probier doch mal:

Code: (dl )
C:\>perl -le "my $var = 'Test     '; print '::'.$var.'::'; $var =~ s/ {3}$//; print '::'.$var.'::'"


Die Perl-Version bekommst Du raus, in dem Du perl -v aufrufst...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pixelflat
 2007-10-15 10:29
#100811 #100811
User since
2007-09-13
15 Artikel
BenutzerIn
[default_avatar]
Also es funktioniert auf alle Fälle. Aber wohl nicht mit meinem String...

Kannst du das mit dem mal testen?
Code: (dl )
29.57.0.150&1-1-36-1-16&135		ConnectionState=CS_R   


//Edit
Seltsam. Wenn ich die Variable in deinem Code anpasse, funktionierts auch.
Vielleicht liegts an was anderem...

Habe das Problem jetzt anders gelöst, in dem ich vorher schon weniger einlese, bzw beim ersten Filtern mehr abschneide - dort hat das mit {3} geklappt.
pq
 2007-10-15 11:40
#100815 #100815
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
die grund ist vermutlich ein windows-carriage-return.
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ perl -we'
use Data::Dumper;
$Data::Dumper::Useqq = 1;
my $s = "foo bar   \n";
print Dumper $s;
$s =~ s/ {3}$//;
print Dumper $s;
'
$VAR1 = "foo bar   \n";
$VAR1 = "foo bar\n";
$ perl -we'
use Data::Dumper;
$Data::Dumper::Useqq = 1;
my $s = "foo bar   \r\n";
print Dumper $s;
$s =~ s/ {3}$//;
print Dumper $s;
'
$VAR1 = "foo bar   \r\n";
$VAR1 = "foo bar   \r\n";

das dollarzeichen in einer regex bedeutet: "direkt vor einem newline". newline unter linux ist
aber ein \n. wenn du eine datei von windows auf linux lädst und vergisst, ascii einzustellen,
wird die datei binär hochgeladen und das \r\n bleibt so erhalten.

also, immer text-dateien auch ascii hochladen.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
<< >> 6 Einträge, 1 Seite



View all threads created 2007-10-15 10:13.