Schrift
[thread]7014[/thread]

Unicode-Matching



<< >> 8 Einträge, 1 Seite
Heromaster
 2005-05-26 17:12
#55135 #55135
User since
2003-08-05
220 Artikel
BenutzerIn
[default_avatar]
Wie bringe ich Perl bei auf Characters zu matchen anstatt auf Bytes? Soweit ich perlunicode verstanden habe, sollte ich nur dafür sorgen das Script selber im Unicode-Format gespeichert wird und das die skalaren Werte im UTF-8 Format vorliegen.
Jedoch funktioniert dies Schnipsel nicht wie erwartet:
Code: (dl )
1
2
$test = "öäü";
$test =~ /[[:alpha:]]+/ ? print 'Treffer' : print 'Kein Treffer';

Ich benutze Perl 5.8.4, das Script selber habe ich als Unicode- bzw. UTF-8-Format gespeichert. Was mache ich falsch?\n\n

<!--EDIT|Heromaster|1117557072-->
Derjenige, der zwei Hasen jagt, lässt einen zurück und verliert den anderen.
ptk
 2005-05-26 17:39
#55136 #55136
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Ich bin mir nicht sicher, ob du [:alpha:] verwenden kannst. Die POSIX-Klassen sind sehr an die aktuelle Locale angelehnt und benutzen anscheinend nicht die Unicode-Database. Versuch doch mal die \p{...}-Notation stattdessen:
Code: (dl )
perl5.8.6 -e 'for (32 .. 126, 160 .. 255) { $ch = chr $_; $isalpha = ($ch =~ /\p{Alpha}/); print "$_ ($ch): $isalpha\n" }'
Gast Gast
 2005-05-26 17:58
#55137 #55137
perldoc perlreref hat noch weitere Informationen.
ptk
 2005-05-26 20:21
#55138 #55138
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Typo? Die gibt's bei mir nicht.
Gast Gast
 2005-05-26 20:43
#55139 #55139
Nope, kein Typo.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
phaylon@gaia:~> perldoc perlreref | wc -l
300
phaylon@gaia:~> perl --version

This is perl, v5.8.4 built for i386-linux-thread-multi

Copyright 1987-2004, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using `man perl' or `perldoc perl'. If you have access to the
Internet, point your browser at http://www.perl.com/, the Perl Home Page.

phaylon@gaia:~>
Dubu
 2005-05-27 00:35
#55140 #55140
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=phaylon,26.05.2005, 18:43]Nope, kein Typo.

Code: (dl )
1
2
phaylon@gaia:~> perldoc perlreref | wc -l
   300
[/quote]
*...such in perl*delta...*

Ah, das ist neu seit Perl 5.8.1!

*... tippeditipp ...*

Und schon gibt es perlreref auch in Deutsch. :)
ptk
 2005-05-27 14:52
#55141 #55141
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Ups, Fehlermeldung falsch gelesen :-)
Heromaster
 2005-05-31 20:29
#55142 #55142
User since
2003-08-05
220 Artikel
BenutzerIn
[default_avatar]
[quote=ptk,26.05.2005, 15:39]Ich bin mir nicht sicher, ob du [:alpha:] verwenden kannst. Die POSIX-Klassen sind sehr an die aktuelle Locale angelehnt und benutzen anscheinend nicht die Unicode-Database. Versuch doch mal die \p{...}-Notation stattdessen:
Code: (dl )
perl5.8.6 -e 'for (32 .. 126, 160 .. 255) { $ch = chr $_; $isalpha = ($ch =~ /\p{Alpha}/); print "$_ ($ch): $isalpha\n" }'
[/quote]
Ja, genau das wars. Hatte ich vorher auch ausprobiert anstatt POSIX-Klassen Unicode-Properties zu benutzen. Nach 1.000 Versuchen und 2 Herzattacken später habe ich dann endlich mitbekommen, das nicht Perl die Schuldige ist, sondern meine Konsole.
Jetzt teste ich Perl auf Unicode über meinen Webbrowser (Ich fühle mich, als würde ich mit Kanonen auf Spatzen schießen).
Nun ja, wenns nicht mit POSIX-Klassen klappt, Unicode zu matchen, dann muss wohl nur noch das hinein:
Code: (dl )
require 5.008;
;)\n\n

<!--EDIT|Heromaster|1117557017-->
Derjenige, der zwei Hasen jagt, lässt einen zurück und verliert den anderen.
<< >> 8 Einträge, 1 Seite



View all threads created 2005-05-26 17:12.