【问题标题】:PHP preg_replace three times with three different patterns? right or wrong?PHP preg_replace 三次使用三种不同的模式?对还是错?
【发布时间】:2011-02-19 17:43:57
【问题描述】:

一个简单的问题:这是最好的方法吗?

$pattern1 = "regexp1";
$pattern2 = "regexp2";
$pattern3 = "regexp3";

$content = preg_replace($pattern1, '', $content);
$content = preg_replace($pattern2, '', $content);
$content = preg_replace($pattern3, '', $content);

我想过滤掉三个搜索模式!我上面的代码是合适的还是有更好的方法?

【问题讨论】:

  • 那些不是真正的正则表达式吗?

标签: php regex preg-replace


【解决方案1】:

当你用相同的东西替换所有东西时,你可以传递一个数组

$content = preg_replace(array($pattern1,$pattern2, $pattern3), '', $content);

或创建一个表达式:

$content = preg_replace('/regexp1|regexp2|regexp3/', '', $content);

如果“表达式”实际上是纯字符串,请改用str_replace

【讨论】:

    【解决方案2】:

    一个非常易读的方法是用模式和替换做一个数组,然后在preg_replace中使用array_keysarray_values

    $replace = [
       "1" => "one",
       "2" => "two",
       "3" => "three"
    ];
    $content = preg_replace( array_keys( $replace ), array_values( $replace ), $content );
    

    这甚至适用于更复杂的模式。以下代码将替换 1、2 和 3,并将删除双空格。

    $replace = [
       "1"       => "one",
       "2"       => "two",
       "3"       => "three",
       "/ {2,}/" => " "
    ];
    $content = preg_replace( array_keys( $replace ), array_values( $replace ), $content );
    

    【讨论】:

    • 我喜欢你的做法。但是,根据模式的简单程度,您可以省略代码:$content = preg_replace(["1", "2", " 3" ], ["one", "two", "three"], $content);
    • 这是关于可读性的。替换数组比使用两个单独的数组更容易阅读。尝试一个包含更多元素的数组,然后编辑第 125 个左右。这就是我使用替换数组和array_keys/array_values 的原因。请记住:您(或其他人)可能需要在稍后阶段阅读您的代码......
    • 我完全同意你的看法,这就是我特别说“取决于模式有多简单......”的主要原因.有时可以通过简写语句来提高代码质量,这是一种利器。因此,作为一把双刃刀,它也可能很危险。明智地使用它。
    【解决方案3】:

    希望这个例子能帮助你理解“在数组中查找”和“从数组中替换”

    $pattern=array('1','2','3');
    $replace=array('one','two','tree');
    $content = preg_replace($pattern,$replace, $content);
    

    【讨论】:

      【解决方案4】:

      要在单个 preg_replace() 调用中进行多次搜索,请使用模式数组。您仍然可以通过单个替换,这是所有三个模式匹配的替换为:

      $content = preg_replace(array($pattern1, $pattern2, $pattern3), '', $content);
      

      【讨论】:

        【解决方案5】:

        我将它用于 XML 标签字符串。

        <?php 
        
         $string = '<JUDGE_NAME><NAME>Ahmad Maarop</NAME>CJ, <NAME>Zaharah Ibrahim</NAME>, <NAME>Prasad Sandosham</NAME>, <NAME>Jeffrey Tan</NAME>, <NAME>Alizatul Khair</NAME> FCJJ</JUDGE_NAME>\r\n';
         $patterns = array('/\bCJ\b/', '/\bJCA\b/','/\bJJCA\b/','/\bPCA\b/', '/\bCJM\b/', '/\bCJSS\b/', '/\bFCJ\b/', '/\bFCJJ\b/', '/\bJ\b/','/\bH\b/', '/\bPK\b/','/\bJC\b/', '/\bHMP\b/', '/\bHHMP\b/', '/\bHMR\b/', '/\bHHMR\b/');
         $replacements = array('<rank>CJ</rank>', '<rank>JCA</rank>','<rank>JJCA</rank>','<rank>PCA</rank>', '<rank>CJM</rank>', '<rank>CJSS</rank>', '<rank>FCJ</rank>', '<rank>FCJJ</rank>', '<rank>J</rank>','<rank>H</rank>', '<rank>PK</rank>','<rank>JC</rank>', '<rank>HMP</rank>', '<rank>HHMP</rank>', '<rank>HMR</rank>', '<rank>HHMR</rank>');
        
           
        
        
          $string = preg_replace($patterns,$replacements,$xmlString);
          
          
          echo $string;
        // <JUDGE_NAME><NAME>Ahmad Maarop</NAME> <rank>CJ</rank>, <NAME>Zaharah Ibrahim</NAME>, <NAME>Prasad Sandosham</NAME>, <NAME>Jeffrey Tan</NAME>, <NAME>Alizatul Khair</NAME> <rank>FCJJ</rank></JUDGE_NAME>\r\n ◀
        
          
        ?>

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-04-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-02
          • 1970-01-01
          相关资源
          最近更新 更多