5
echo preg_match("/\b(בדיקה|מילה)\b/iu", "זוהי בדיקה");

出于某种原因,此代码在我测试过的几台服务器上返回 1,但在一台特定服务器上返回 0。

PCRE 编译时带有 UTF-8 支持和 Unicode 属性支持。可能是什么问题?

4

2 回答 2

2

PHP 使用的 PCRE 版本之间可能存在差异。

PHP 和 PCRE 版本: http: //php.net/pcre.installation

你应该使用 8.10+ (PHP 5.3.4+)

8.10 版 2010 年 6 月 25 日:

  1. 添加了 PCRE_UCP 以使 \b、\d、\s、\w 和某些 POSIX 字符类使用 Unicode 属性。(*UCP) 在模式的开头可用于设置此选项。修改 pcretest 以添加 /W 来测试这个工具。添加了 REG_UCP 以使其可通过 POSIX 接口使用。

编辑: 刚刚做了一些测试,它在 PHP 5.3.10 上给出 1,在 PHP 5.3.2 和 PHP 5.3.3 上给出 0。

于 2012-04-11T10:19:46.940 回答
1

它可能取决于 PCRE lib 的版本。为了使事情更加规范化,请尝试使用«UCP动词»:preg_match('/(*UCP)\b(בדיקה|מילה)\b/iu', 'זוהי בדיקה')

它仍然需要 PCRE v8.10,自 5.3.4 或在 compile flag 中提到时随 PHP 一起提供--with-pcre-regex=DIR

参考(俄语)

于 2012-04-11T10:25:49.887 回答