2011-01-24 1 views
3

私は奇妙な問題があります。 UTF8境界マッチングが機能しない一部のサーバーで一部のサーバで正規表現の単語境界がut8で機能しない

<?php 
$reg = '/(?<!\pL)(test)(?!\pL)/u'; 
$text='This is a test text'; 
$replace = 'test_replaced'; 

$newtext = preg_replace($reg, $replace, $text); 

echo "Error: ".preg_last_error()."\nResult: ".$newtext."\n"; 

?> 

:この短いコードを検討してください。

Error: 0 
Result: This is a test_replaced text 

私は\b代わりに、コードの動作を使用するときのように単語境界に問題が発生しました:私は、すべてが正常に動作する多数のサーバーで

Error: 0 
Result: 

を取得します。

どちらのサーバも、PHP 5.2.13を使用しています。何が間違っているかもしれないし、それを回避するための手掛かりはありますか?

+0

これに '\ b'を使用してみませんか?いくつのサーバーがありますか? 2つ以上? – SilentGhost

+0

\ bはUTF8で動作しません。私は2つのサーバー上の問題を持っています(数百のうち) – freediver

+0

これはおそらく[PHP 5.3.4で修正されたバグ](http://stackoverflow.com/a/41074513/5527985) –

答えて

2

コメントhereは、PCREを--enable-unicode-propertiesでコンパイルする必要があるようです。

+0

に関連していますありがとう、それを試してみてください – freediver

+0

これは、ありがとう! – freediver

関連する問題