我有这个正则表达式用于匹配 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);
第一个有效。第二个没有。
mb_ereg_replace
不实际上支持那些Unicode字符转义。并且它不使用正则表达式分隔符。 (参见Oniguruma)
preg_replace
使用 PCRE 正则表达式引擎,它支持两者。
无论如何,不存在“更好”的应用程序。它要么起作用,要么不起作用。
我试图找到有关这些函数的更多信息,似乎 preg_replace 和 mb_ereg_replace/mb_eregi_replace 之间的一个关键区别是后者不使用 / 来包含问题中的测试应创建的模式,如下所示:
$str = mb_ereg_replace('^[\pZ\pC]+|[\pZ\pC]+$', '', $str);
奇怪的是,这些信息似乎不在 php 文档本身中,而是在用户的评论中。