在这种情况下是 preg_replace 还是 mb_ereg_replace?

问题描述 投票:0回答:2

我有这个正则表达式用于匹配 Unicode 中的空格:

/^[\pZ\pC]+|[\pZ\pC]+$/u

我什至不确定它的作用,但它似乎有效。现在,在这种情况下,哪个函数更适用,为什么?

$str = preg_replace('/^[\pZ\pC]+|[\pZ\pC]+$/u', '', $str);

$str = mb_ereg_replace('/^[\pZ\pC]+|[\pZ\pC]+$/u', '', $str);
php unicode utf-8 preg-replace multibyte
2个回答
4
投票

第一个有效。第二个没有。

再次尝试了一下,

mb_ereg_replace
实际上支持那些Unicode字符转义。并且它不使用正则表达式分隔符。 (参见Oniguruma

preg_replace
使用 PCRE 正则表达式引擎,它支持两者。


无论如何,不存在“更好”的应用程序。它要么起作用,要么不起作用。


0
投票

我试图找到有关这些函数的更多信息,似乎 preg_replace 和 mb_ereg_replace/mb_eregi_replace 之间的一个关键区别是后者不使用 / 来包含问题中的测试应创建的模式,如下所示:

$str = mb_ereg_replace('^[\pZ\pC]+|[\pZ\pC]+$', '', $str); 

奇怪的是,这些信息似乎不在 php 文档本身中,而是在用户的评论中。

© www.soinside.com 2019 - 2024. All rights reserved.