我需要为阿拉伯语/波斯语字母中的某些垃圾邮件单词定义一个 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
.有意义?