如何为阿拉伯字符定义 libpcre 正则表达式


How do I define a libpcre regexp for arabic characters?

我需要为阿拉伯语/波斯语字母中的某些垃圾邮件单词定义一个 PCRE 正则表达式,以便在 drupal 垃圾邮件模块中使用。问题在于,通常的PCRE正则表达式显然无法在阿拉伯字母中找到模式。

例如,虽然/bad word/标记了"坏词"的实例,但

/کلمه بد/i

无法标记"کلمه بد"。

如果我使用 u (Unicode) PCRE 修饰符,我没有问题:

$string = 'کلمه بد';
if (preg_match('~'p{Arabic}~u', $string) > 0)
{
    var_dump('contains Arabic characters');
    if (preg_match('~کلمه بد~ui', $string) > 0)
    {
        var_dump('contains spam-ish Arabic characters');
    }
}
string(26) "contains Arabic characters"
string(35) "contains spam-ish Arabic characters"

它在 IDEOne.com 上运行也很好。请务必将文件(并转换输入数据)保存为 UTF-8。

Perl 源代码中的文字 Unicode 文本只有在源文件中有 use utf8; 时才能正确识别。

你可以做/'x{644}/你可以做

open my $fh, '<:utf8', 'somefile.txt' or die "blah blah";
my $bad_thing = <$fh>;
/$bad_thing/;

如果您的数据正确解码,两者都可以在没有utf8杂注的情况下工作,但如果您想/ل/那么您需要use utf8.有意义?