正则表达式边界在某些服务器上的ut8中不起作用

时间:2011-01-24 12:22:04

标签: php regex

我有一个奇怪的问题。考虑这个简短的代码:

<?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";

?>

在某些服务器上,UTF8边界匹配不起作用。我得到了

Error: 0
Result: 

在大多数服务器上,一切正常:

Error: 0
Result: This is a test_replaced text

单词边界似乎存在问题,因为当我使用\b而不是代码有效时。

两台服务器都使用php 5.2.13。什么可能是错误的线索以及如何绕过它?

1 个答案:

答案 0 :(得分:2)

评论here似乎表明PCRE需要使用--enable-unicode-properties进行编译。