Thread Regex für Spamfilter bei Nicht-Ascii (33 answers)
Opened by GwenDragon at 2012-06-17 18:27

GwenDragon
 2013-05-23 17:41
#167765 #167765
User since
2005-01-17
14774 Artikel
Admin1
[Homepage]
user image
Ich muss den Thread nochmals hervorkramen. Ich bin gerade mit Perligen Regenechsen im Clinch.

Perl 5.10.1 auf Debian 6.

Ich scanne auf Spamwörter in Zeichenketten. Die Spamwörter (viele Zeichen auch aus anderen Sprachen! ALso auc JP, CN, FR, RU etc.) kommen aus einer UTF-kodierten Datei.
Normalerweise kann eine so per regex testen
Code: (dl )
/\b$BOESESWORT\b/


Mein Test zeigt:
root@srv22 ~ # perl -E "say 'Der Preis beträgt 100 EUR.' ~~ /\bbet\b/";

root@srv22 ~ # perl -E "say 'bet and win! 1000$.' ~~ /\bbet\b/";
1


Wenn ich auf Wortgrenzen mit \b teste, weil ich nach Wörtern scanne, schlägt alles außerhalb Standard-ASCII fehl.
Wohl ein Locales-Problem.
Nachgeschaut und siehe da, ein Server mit folgenden locales:
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=


der hat als locale also nur en und das kann nicht geändert werden.
Ein use locale; in Perl ist also sinnlos.

Wie kann ich nun trotzdem bei dem festen locale EN Zeichenketten per Regex auf Wörter prüfen?

Editiert von GwenDragon: defekte tt-Tags repariert
Last edited: 2013-05-23 18:07:13 +0200 (CEST)

View full thread Regex für Spamfilter bei Nicht-Ascii