Schrift
[thread]8191[/thread]

"sichere" Zeichenketten mit tr?: gehts besser? schneller? einfacher? (Seite 2)

Leser: 2


<< |< 1 2 >| >> 14 Einträge, 2 Seiten
GwenDragon
 2006-07-24 14:51
#68328 #68328
User since
2005-01-17
14848 Artikel
Admin1
[Homepage]
user image
[quote=sid burn,24.07.2006, 10:52]
Quote
Ganz einfach, sie ist nur bei 8-Bit-Zeichensätzen richtig! ;)

Wie meinst du das? Wenn ich [a-z] eintippe dann matcht er [a-z] auch bei UTF8.[/quote]
Ja, logisch, das ist ja auch 7bit!

Aber wenn du schreibst [A-ZÄÖÜ], dann ist das nicht logisch.
Dann musst du doch use utf8 verwenden, oder?
Oder schreibst du deinen Quellcode nur in UTF?
sid burn
 2006-07-24 22:02
#68329 #68329
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
[quote=GwenDragon,24.July.2006, 12:48]@sid burn

Quote
sosum schrieb:
Ich möchte Zeichenketten "sichern", will heissen möchte alle nicht alphabetischen Zeichen oder Zahlen daraus entfernen -und das möglichst effizient.

Er schrieb nicht alle nichtdeutschen Zeichen.[/quote]
Er schrieb aber auch nicht alle Buchstaben und Zahlen in allen Sprachen. Und in seinem tr// hat er auch keine Französichen, Spanischen, Russischen oder Chinesischen Zeichen aufgenommen. Manchmal ist das was man Schreibt oder meint zwei unterschiedliche Dinge. Und ich denke er hat auch nicht gleich mit dem Gedanken gespielt alle Buchstaben aus jeder Weltweit bekannten Sprache zu erhalten.

Aber klar, wenn man alle Buchstaben von jeder Sprache erhalten bleiben soll sind die POSIX Zeichenklassen sicherlich besser geeignet so wie du es gezeigt hast. Ob es nun das ist was er will muss er selber wissen. Ich wollte nur den Hinweis geben das er sich nachher nicht Wundern soll wenn doch wieder irgendwelche Komische Zeichen auftauchen, die er nicht kennt.

Quote
[quote=sid burn,24.07.2006, 10:52]
Quote
Ganz einfach, sie ist nur bei 8-Bit-Zeichensätzen richtig! ;)

Wie meinst du das? Wenn ich [a-z] eintippe dann matcht er [a-z] auch bei UTF8.

Ja, logisch, das ist ja auch 7bit!
[/quote]
Damit wollte ich lediglich sagen das die Regex immer noch das gleiche Matcht wie sonst auch, egal ob nun 8bit Zeichensatz oder nicht. Ob es richtig oder Falsch ist entscheidet der Programmierer was er haben will, nicht der Zeichensatz.

Wenn ich nur a-z extrahieren möchte, ist das bei einem 8bit Zeichensatz genauso richtig wie bei einem 7bit Zeichensatz.

Ok kleinigkeiten. ;)
Bitte nicht so ernst nehmen. ;)
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
GwenDragon
 2006-07-25 16:17
#68330 #68330
User since
2005-01-17
14848 Artikel
Admin1
[Homepage]
user image
@sid burn
Ist ok. ;)

Solche Antworten kommen meist zustanden, wenn eineR nicht weiß, was Threadstarter meinen ;)
sosum
 2006-07-26 04:59
#68331 #68331
User since
2006-01-10
11 Artikel
BenutzerIn
[default_avatar]
So, danke erstmal für die Lösungsvorschläge... ich habe leider erst jetzt Zeit gefunden, die verschiedenen Varianten gegeneinander abzuwägen.

Tatsächlich ging es mir nur darum, auf effiziente Art und Weise aus Unkraut aus Zeichenketten rauszufiltern. Unabhängig vom Zeichensatz. Zeichenklassen werden von tr afaik nicht unterstützt, da muss man dann wohl zu "echten" regulären Ausdrücken greifen.

Ich habe daher (erstmal) folgende drei Varianten gegeneinander abgewogen:
Code: (dl )
1
2
3
4
5
6
my $beginstr = "Hallo-'\"%$(\"'Welt";
alle res-Variablen = beginstr;

'tr/c+s'  => sub     { $res1 =~ tr/a-zA-Z0-9öäüßÄÖÜ/_/c;$res1 =~ s/_//g; },
'tr/cd'   => sub     { $res2 =~ tr/a-zA-Z0-9öäüßÄÖÜ//cd; },
's'       => sub     { $res3 =~ s/[^a-zA-Z0-9öäüßÄÖÜ]//g; }

Die Variante 1 war meine ursprüngliche Lösung, da mir der Schalter /d nicht bekannt war :D

Ergebnis (auf meinem betagten Rechner)
Code: (dl )
1
2
3
4
            Rate      s tr/c+s  tr/cd
s      1261359/s     --   -16%   -51%
tr/c+s 1505453/s    19%     --   -41%
tr/cd  2566349/s   103%    70%     --


Wie erwartet, geht der tr-Operator am schnellsten zur Sache, für meine Zwecke reichen im Prinzip die lateinischen Buchstaben, daher gehe ich vorerst auch diesen Weg.

Danke Euch allen!\n\n

<!--EDIT|sosum|1153876017-->
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2006-07-23 21:41.