本文介绍了正则表达式字边界在某些服务器上的 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 中不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-03 11:15