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

发布于 2024-11-06 09:34:45 字数 268 浏览 4 评论 0原文

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

例如,虽然 /bad word/ 标记“坏词”的实例,但

/کلمه بد/i

无法标记“坏词”。

I need to define a PCRE regexp for certain spam-ish words in Arabic/Persian alphabet to be used in drupal spam module. The problem is that the usual PCRE regexp is apparently unable to find patters in Arabic alphabets.

For example, while /bad word/ flags instances of 'bad word', but

/کلمه بد/i

Is unable to flag 'کلمه بد'.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

漆黑的白昼 2024-11-13 09:34:45

如果我使用 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 格式保存文件(并将输入数据转换为)。

I have no problem with that if I use the u (Unicode) PCRE modifier:

$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"

It runs just fine on IDEOne.com too. Be sure to save your files (and convert input data) in (to) UTF-8.

挖鼻大婶 2024-11-13 09:34:45

仅当源文件中包含 use utf8; 时,Perl 源代码中的文字 Unicode 文本才会被正确识别。

如果您的数据已正确解码,您可以执行 /\x{644}/ ,并且可以

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

在没有 utf8 pragma 的情况下执行,但如果您想做 < code>/ä/ 那么你需要使用utf8。有道理吗?

Literal Unicode text in Perl source will only be recognized properly if the source file has use utf8; in it.

You can do /\x{644}/ and you can do

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

and either will work without the utf8 pragma if your data is properly decoded, but if you want to do /ل/ then you need use utf8. Make sense?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文