本文介绍了正则表达式字边界在某些服务器上的 utf8 中不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个奇怪的问题.考虑这个短代码:
I have a weird problem. consider this short code:
<?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 边界匹配不起作用.我明白了
On some servers the UTF8 boundary matching does not work. I get
Error: 0
Result:
在大多数服务器上一切正常:
On majority servers everything works normally:
Error: 0
Result: This is a test_replaced text
词边界似乎存在问题,因为当我使用 \b
代替代码时.
There seems to be a problem with word boundary as when I use \b
instead the code works.
两台服务器都使用 php 5.2.13.任何可能出错的线索以及如何解决它?
Both servers use php 5.2.13. Any clues what might be wrong and how to get around it?
推荐答案
Comment here 似乎暗示需要使用 --enable-unicode-properties
编译 PCRE.
Comment here seems to suggest that PCRE needs to be compiled with --enable-unicode-properties
.
这篇关于正则表达式字边界在某些服务器上的 utf8 中不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!