【问题标题】:combine multiple regex into one for comma removing将多个正则表达式合并为一个以删除逗号
【发布时间】:2017-01-16 23:17:56
【问题描述】:

$reg1 = preg_replace('/(?<!\d),(?=\s+\d)/', '', $text); $reg2 = preg_replace('/,\s*$/', '', $reg1); $reg3 = preg_replace('/\s\s+/', ' ', $reg2);

我有这三个正则表达式替换调用。我可以将它们合二为一吗? 第一个删除字符串后和数字前的逗号。 第二个删除了末尾的逗号。 第三个修剪空白。

【问题讨论】:

  • 请添加一些示例输入字符串和预期结果。
  • 出于某种原因您需要将它们组合起来吗?性能受苦了吗?为了简化第二个正则表达式,您可以尝试rtrim($reg1, ',');。我不能很好地阅读正则表达式,但第三个可以使用trim($reg2);。如果字符串看起来像这样, an amazing, string to mess up your, 10th day , ,你需要做什么?
  • 'hulk, 33,' =&gt; 'hulk 33' 'test 3 ,' =&gt; 'test 3'

标签: php regex


【解决方案1】:

前两个可以像这样组合:

$reg1 = preg_replace('/(?<!\d),\s*(?=\d|$)/', '', $text);

【讨论】:

    【解决方案2】:

    由于替换值不同,您只能将前 2 个正则表达式与“或”条件分组。 preg_replace 还允许多个替换,因此您可以将第三个正则表达式作为单独的参数传递。

    $result = preg_replace(array('/((?<!\d),(?=\s+\d))|(,\s*$)/', '(\s\s+)'), array('', ' '), $text);
    

    【讨论】:

      【解决方案3】:

      您可以将这三个都传递给preg_replace

      $patterns = array('/(?<!\d),(?=\s+\d)/', '/,\s*$/', '/\s\s+/');
      $replacements = array('', '', ' ');
      
      $result = preg_replace($patterns, $replacements, $text);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-13
        • 1970-01-01
        • 2015-07-26
        • 2011-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多