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 preg_replace() 正则替换所有符合条件的字符串
如何将正则表达式参数传递给 PHP 中的 preg 替换回调?