【问题标题】:Using php, how would I replace [0-9],[0-9] with [0-9][0-9]?使用 php,如何将 [0-9]、[0-9] 替换为 [0-9][0-9]?
【发布时间】:2014-07-26 14:10:34
【问题描述】:

假设我有一个字符串“1,000,786”。我希望将其转换为“1000786”。我知道 preg_replace 的第一部分类似于“[0-9],[0-9]”,但我不明白如何在 preg_replace 的“替换为”部分中取回数值。谢谢。

编辑:对不起,我忘了提到它并不像删除逗号那么简单,因为可能包含字母字符。只有当逗号在 2 个数字之间时,我才希望它消失。

示例:“Apple,Banana 1,746”将是“Apple,Banana 1746”。

【问题讨论】:

  • 你根本不需要像,这样的remove a fixed character的正则表达式,除非是练习。
  • 你说不是去掉逗号那么简单。你能举一个例子,它不仅仅是删除逗号那么简单吗?您给出的示例只是删除了逗号,不是吗?
  • 如果您查看示例,Apple 和 Banana 之间仍然存在逗号。
  • @user1413341 编辑了我的答案以正确回答您的问题

标签: php regex


【解决方案1】:

下面的正则表达式只有在逗号前面有一个数字并且后面必须跟一个数字时才会删除它。

(?<=\d),(?=\d)

替换字符串:

Empty string

DEMO

你的代码是,

<?php
$string = '1,000,786';
$pattern = "~(?<=\d),(?=\d)~";
$replacement = "";
echo preg_replace($pattern, $replacement, $string);
?> //=> 1000786

<?php
$string = 'Apple, Banana 1,746';
$pattern = "~(?<=\d),(?=\d)~";
$replacement = "";
echo preg_replace($pattern, $replacement, $string);
?> //=> Apple, Banana 1746

【讨论】:

    【解决方案2】:

    你不必为此使用正则表达式,调用 str_replace() 就足够了:

    $s = str_replace(",", "", "1,000,786");
    

    【讨论】:

      【解决方案3】:

      要处理之前的文本,请考虑以下代码:

      $text = 'Apple, Banana, 1,746';
      preg_match('/[0-9]+,[0-9]+/', $text, $matches);
      $text = str_replace($matches[0], str_replace(',', '', $matches[0]), $text);
      

      【讨论】:

        【解决方案4】:

        搜索:

        /(\d+),(\d+)(?:,(\d+))?/
        

        并将其替换为:

        $1$2$3
        

        Online Regex Demo

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-08-05
          • 1970-01-01
          • 2013-07-15
          • 1970-01-01
          • 1970-01-01
          • 2022-01-22
          • 2018-12-15
          • 2020-04-07
          相关资源
          最近更新 更多