Leser: 19
1 2 3 4
my $regex_notiz = '[^a-z!/()=?_üäöß:.,\-+ \d$%]'; my $text = '!"§$%&/()=?_und überhaupt:;,GROßÖÄÜß.+und ziffern 0123456789-und kleinöäüß%$'; $text =~ s/$regex_notiz//ig; print "neu: >$text<\n";
1 2 3 4 5 6 7 8
use strict; use warnings; use Encode; my $regex_notiz = decode("UTF-8",'[^a-z!/()=?_üäöß:.,\-+ \d$%]'); my $text = decode("UTF-8",'!"§$%&/()=?_und überhaupt:;,GROßÖÄÜß.+und ziffern 0123456789-und kleinöäüß%$'); $text =~ s/$regex_notiz//ig; print "neu: >$text<\n";
1 2 3 4
my $regex_notiz = decode("UTF-8",'[^a-z!/()=?_üäöß:.,\-+ \d$%]'); my $text = decode("UTF-8",'!"§$%&/()=?_und überhaupt:;,GROßÖÄÜß.+und ziffern 0123456789-und kleinöäüß%$'); $text =~ s/$regex_notiz//ig; print "neu: >$text<\n";
1
2
3
4
5
6
7
8
9
10
Wide character in print at regex.pl line 15 (#1)
(W utf8) Perl met a wide character (>255) when it wasn't expecting
one. This warning is by default on for I/O (like print). The easiest
way to quiet this warning is simply to add the :utf8 layer to the
output, e.g. binmode STDOUT, ':utf8'. Another way to turn off the
warning is to add no warnings 'utf8'; but that is often closer to
cheating. In general, you are supposed to explicitly mark the
filehandle with an encoding, see open and perlfunc/binmode.
neu: >!´┐¢$%/()=?_und ´┐¢berhaupt:,GRO´┐¢´┐¢´┐¢´┐¢´┐¢.+und ziffern 0123456789-und klein´┐¢´┐¢´┐¢´┐¢%$<
2009-12-25T14:55:50 leo11Unter Linux ging das.. .
neu: >!?$%/()=?_und ?berhaupt:,?????.+und ziffern 0123456789-und klein????%$<
2009-12-25T14:59:02 biancaJetzt werden alle Umlaute in Fragezeichen umgewandelt, keine Fehler und keine Warnungen aber trotzdem nicht wie gewünscht:
Code: (dl )neu: >!?$%/()=?_und ?berhaupt:,?????.+und ziffern 0123456789-und klein????%$<
2009-12-25T15:02:44 leo11Aber sie bleiben drin, so wie du wes wolltest.
neu: >!$%/()=?_und ³berhaupt:,GRO▀Í─▄▀.+und ziffern 0123456789-und klein÷õ³▀%$<
2009-12-25T14:59:02 biancaEdit: Verwende nämlich den identischen Regex mit Javascript und auch mit Schalter /ig und dort klappt das super auch ohne explizit angegebene großgeschriebenen Umlaute.
2009-12-25T15:18:21 leo11Hab aber gerad keine Lust das nachzuschauen.
2009-12-25T15:23:27 biancaLeider hab ich aber immer noch nicht begriffen, warum der /i im Regex nicht dazu führt, dass zu einem kleingeschriebenen Umlaut auch ein großer gehört.
1
2
3
4
$ perl -w -e '$a=">äüöÄÜÖ<"; $a =~ s/ä//ig; print $a'
>üöÄÜÖ<
$ perl -MEncode -w -e '$a= decode("Latin-1",">äüöÄÜÖ<"); $a =~ s/ä//ig; print $a'
>üöÜÖ<
2009-12-25T14:59:02 biancaDu weißt, dass der Zeichensatz von cmd.exe *nicht* UTF-8 ist und man deswegen sehr häufig "Müll" angezeigt bekommt? Mach die Ausgabe lieber in eine Datei und schau Dir die Datei an...2009-12-25T14:55:50 leo11Unter Linux ging das.. .
Hab hier ActivePerl auf Windoof XP.
2009-12-25T13:41:17 biancaCode (perl): (dl )$text =~ s/$regex_notiz//ig;
2009-12-25T14:41:11 EscapeLass einfach das 'i' raus.
neu: >!$%/()=?_und ³berhaupt:,▀Í─▄▀.+und ziffern 0123456789-und klein÷õ³▀%$<
2009-12-25T15:15:24 leo11Wieso du dann i verwendest ist mir nicht klar. i bedeutet ignore case.
2009-12-25T15:17:27 biancaWarum tut /i nicht auch ÖÄÜ?
Sind die im ASCII-Zeichensatz nicht auch alle einfach 64 Stellen höher als ihre kleingeschriebenen Entsprechungen? Oder arbeitet der /i in Perl anders als ich denke und als Javascript das tut?
1 2 3 4 5 6
use utf8; use Encode; my $regex_notiz = '[^a-z!/()=?_üäöß:.,\-+ \d$%]'; my $text = '!"§$%&/()=?_und überhaupt:;,GROßÖÄÜß.+und ziffern 0123456789-und kleinöäüß%$'; $text =~ s/$regex_notiz//ig; print encode_utf8 "neu: >$text<\n";
neu: >!$%/()=?_und überhaupt:,GROßÖÄÜß.+und ziffern 0123456789-und kleinöäüß%$<