PHP:preg_replace 括号的作用?

13

如何在PHP中使用正确的语法来仅替换括号?

$search = preg_replace('/\(\)/','',$search);

谢谢。

4个回答

27
假设你想从$search字符串中同时删除():
$search = preg_replace('/\(|\)/','',$search);

我认为最快的方法是使用strtr函数,像这样:

$search = strtr($search, array('(' => '', ')' => ''));

您不需要额外的包装(),因为它是用于导出模式,而在这种情况下是不需要的。 - Tony Bogdanov
@Tony:确实!我已经移除了它们。 - J. Bruni

12

以下是我进行的一项小型现场测试的结果:

preg_replace("/\(|\)/", "", $str): 1.590735912323

preg_replace('/[\(\)]/', '', $str): 1.3762638568878

strtr($str, array('(' => '', ')' => '')): 0.84079194068909

str_replace("(", "", str_replace(")", "", $str)): 0.80222821235657

最后两个几乎完全相同,正如J. Bruni所指出的。


将以下代码添加到基准测试中:preg_replace('/[\(\)]/', '', $str); - 并告诉我们结果。 - J. Bruni
因此,一对str_replace比单个strtr更快...如果可以避免使用数组,而改用一对字符串参数,那么它可能会更快... strtr($str,'()',' ')-但这不是期望的行为...另外,有几个替换,肯定是strtr胜出! :-) - J. Bruni
是的,range看起来更快。strstr和str_replace几乎相同,在当前测试中我找不到明显的区别,它们每次都上下波动。不过strstr会是更优雅的解决方案。 - Tony Bogdanov
1
在正则表达式中,范围比逻辑更快。当可用时,字符串函数总是比正则表达式更快。只有在需要多个字符串函数的复杂性增加时,正则表达式才会胜出于字符串函数。 - Nilpo

2
你是指像这样吗?
$search = preg_replace('/[()]/', '', $search);

这将删除所有括号,而不考虑配对。

2
不区分大小写的括号? :) - J. Bruni
通常这只是个开始……习惯力量的体现。 :) - Nilpo

1

这是正确的语法,尽管 preg_replace 是用于正则表达式的,但如果您只想替换 (),那么 str_replace 会快几倍。

如果您想在任何地方替换 (),可以使用以下代码:

preg_replace("/\(|\)/", "", $str);

是的,但你得使用 str_replace 两次,对吧?一次用于每个括号? - Norse
1
真的,但我打赌5美元它仍然会更快:P - Tony Bogdanov
1
@Tony:strtr 函数可以一次性进行多个“str_replace”操作。我在一个基本的模板类中使用它……不需要循环和 str_replace,只需一个单独的 strtr 调用即可…… - J. Bruni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接