PHP:Preg 替换括号?

Posted

技术标签:

【中文标题】PHP:Preg 替换括号?【英文标题】:PHP: Preg replace parentheses? 【发布时间】:2012-03-19 13:19:44 【问题描述】:

preg_replace 只是 php 中的括号的正确语法是什么?

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

谢谢

【问题讨论】:

【参考方案1】:

你的意思是这样的?

$search = preg_replace('/[()]/', '', $search);

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

【讨论】:

括号不区分大小写? :) 通常这只是开始……习惯的力量。 :)【参考方案2】:

这是我的小实地测试结果:

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); - 让我们知道结果。 因此,几个 str_replaces 比单个 strtr 更快...如果可以避免使用几个字符串参数来支持数组,也许它应该更快...strtr($str, '()', ' ') -但这不是理想的行为......而且,有几个替换,当然 strtr 会赢! :-) 是的,范围看起来更快。 strstr 和 str_replace 几乎相同,我在当前测试中找不到显着差异,它们每次都会上升或下降.. strstr 会是更优雅的解决方案。 在正则表达式中,范围总是比逻辑快。并且字符串函数在可用时总是比正则表达式快。除非您增加导致需要多个字符串函数的复杂性,否则正则表达式不会淘汰字符串函数。 这真的很有用。上一个!谢谢。【参考方案3】:

假设您想从$search 字符串中同时删除()

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

我认为最快的方法是使用strtr 函数,如下所示:

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

【讨论】:

你不需要额外的包装 () 它用于导出在这种情况下不需要的模式。 @Tony:确实!我已经删除了它们。【参考方案4】:

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

如果您想替换(),无论它们在哪里,您都可以使用

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

【讨论】:

是的,但你必须使用 str_replace 两次,虽然正确,每个括号一个? 没错,但我打赌 5 美元它仍然会更快:P @Tony:strtr 函数可以一次创建多个“str_replaces”。我在一个基本的模板类中使用它......而不是循环 + str_replace,只是一个 strtr 调用......

以上是关于PHP:Preg 替换括号?的主要内容,如果未能解决你的问题,请参考以下文章

php替换大括号内的文字

php Preg替换回调示例

PHP preg_replace() 正则替换所有符合条件的字符串

如何将正则表达式参数传递给 PHP 中的 preg 替换回调?

ereg()替换为preg_match(),ereg_repalce替换为preg_replace得加斜杠

php 中preg_replace执行一个正则表达式的搜索和替换