Schrift
[thread]8165[/thread]

Steuerzeichen ausgeben: ohne es auszufühen (Seite 2)

Leser: 1


<< |< 1 2 >| >> 16 Einträge, 2 Seiten
pq
 2006-07-15 15:39
#68105 #68105
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
es gibt kein steuerzeichen \s! \s gibt es nur in regexes.
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
styx-cc
 2006-07-15 17:49
#68106 #68106
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Dann ersetze doch vor der Ausgabe "einfache Backslash" durch doppelte!?
Code: (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl
use strict;
use warnings;

my $s = '\s';
$s =~ #\\#\\\\#, $s;

print "$s";


MfG
Pörl.
renee
 2006-07-15 17:57
#68107 #68107
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das funktioniert bei ein Match aber nicht, da nicht '\s' gematcht wird sondern das Leerzeichen...
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/
nepos
 2006-07-15 19:40
#68108 #68108
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hm, wenn du beim Leerzeichen wissen willst, was es war, koenntest du das gematchte Zeichen als ASCII-Code ausgeben:
Code (perl): (dl )
print ord($s);


EDIT: Falls es mehr als ein Zeichen in $s sind, musst du mit ner Schleife ran, da ord() nur das erste Zeichen als ASCII-Code ausgibt.\n\n

<!--EDIT|nepos|1152978110-->
sid burn
 2006-07-16 23:07
#68109 #68109
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Code: (dl )
m/\s+|\s*\t|\s*\n\r?|und so weiter/g)

"\s" selber steht NICHT für Leerzeichen, sondern für Whitespace Zeichen. Ein Whitespace Zeichen ist jedes Zeichen das bei einem Ausdruck z.B. keine Farbe verschwenden würde. Dein kompletter Regulärer Ausdruck kannst du also auf folgendes kürzen.
Code: (dl )
m/\s/g

Da \s bereits \t, \n, \r etc. enthält sind deine ganzen Alternativen hinfällig.

Ansonsten könntest du es folgendermaßen machen, dass du ein Hash aufbaust dessen Schlüssel der ASCII Wert des Zeichen ist, und der Wert den String den du ausgeben möchtest.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/perl
use warnings;
use strict;

my $text = "Hallo\t\r\nWelt foo";

my %symbols = (
ord " " => '[SPACE]',
ord "\n" => '\n',
ord "\t" => '\t',
ord "\r" => '\r',
);

while ( $text =~ m/\G (\S*) (\s) (\S*) /gx ) {
print $1,
$symbols{ ord($2) },
$3;
}
print "\n";


Ausgabe:
Code: (dl )
Hallo\t\r\nWelt[SPACE][SPACE][SPACE]foo
\n\n

<!--EDIT|sid burn|1153077948-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
Crian
 2006-07-17 15:41
#68110 #68110
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=pktm,15.07.2006, 13:22]
Code: (dl )
1
2
3
4
5
while($text =~ m/\s+|\s*\t|\s*\n\r?|und so weiter/g) {
print "Gefunden an Position", pos $text, "\n";
print "Das gefundene Zeichen ist: [$1]\n";
print "Leider kann ich nicht genau sagen, um was für ein Zeichen es sich handelt...\n";
}
[/quote]
Wieso erwartest du, dass in $1 irgendwas steht? die RE fängt nichts.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2006-07-15 01:17.