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

何らかの理由で、このコードは、テストした複数のサーバーでは1を返しますが、特定の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. \b、\d、\s、\w、および特定の POSIX 文字クラスが Unicode プロパティを使用するように PCRE_UCP を追加しました。(*UCP) をパターンの先頭に使用して、このオプションを設定できます。この機能をテストするために、pcretest を変更して /W を追加しました。POSIX インターフェイス経由で使用できるように REG_UCP を追加しました。

編集: いくつかのテストを行ったところ、PHP 5.3.10 では 1、PHP 5.3.2 および PHP 5.3.3 では 0 が返されました。

于 2012-04-11T10:19:46.940 に答える
1

PCRElibのバージョンによって異なる場合があります。物事をより正規化するには、«UCP動詞»を使用してみてくださいpreg_match('/(*UCP)\b(בדיקה|מילה)\b/iu', 'זוהי בדיקה')

それでも、5.3.4以降またはコンパイルフラグで言及されている場合はPHPに同梱されているPCREv8.10が必要--with-pcre-regex=DIRです。

Ref(ロシア語)

于 2012-04-11T10:25:49.887 に答える