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

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

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

谢谢

【问题讨论】:

    标签: php regex preg-replace pcre


    【解决方案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 调用......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多