Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用正则表达式和PHP格式化数字_Php_Regex - Fatal编程技术网

如何使用正则表达式和PHP格式化数字

如何使用正则表达式和PHP格式化数字,php,regex,Php,Regex,我在练习正则表达式 我试图用PHP和正则表达式格式化数字。我想通过使用PHP和正则表达式在11122233444或11222333444到11222333444之间的格式11122233444或11222333444的每3个数字后面添加逗号 我找了很多,但找不到这个问题的确切答案 我知道php(number_格式)中有函数可以实现这一点,但我想使用正则表达式和php来实现这一点,因为我正在学习正则表达式并进行练习,所以我只想使用正则表达式和php。这里有一个基于正则表达式的解决方案: $repl

我在练习正则表达式

我试图用PHP和正则表达式格式化数字。我想通过使用PHP和正则表达式在11122233444或11222333444到11222333444之间的格式11122233444或11222333444的每3个数字后面添加逗号

我找了很多,但找不到这个问题的确切答案


我知道php(number_格式)中有函数可以实现这一点,但我想使用正则表达式和php来实现这一点,因为我正在学习正则表达式并进行练习,所以我只想使用正则表达式和php。

这里有一个基于正则表达式的解决方案:

$repl = preg_replace('/(?!^)(?=(?:\d{3})+$)/m', ',', $input);
说明:

  • (?!^)
    -负前瞻,以确保我们不在输入的开始
  • (?=(?:\d{3})+$)
    -正向前瞻,以确保当前位置后有1个或多个3位数集
  • 替换只是一个字面上的逗号
  • 更多的解释可以在链接的演示中找到

    • 以下是一个基于正则表达式的解决方案:

      $repl = preg_replace('/(?!^)(?=(?:\d{3})+$)/m', ',', $input);
      
      说明:

      • (?!^)
        -负前瞻,以确保我们不在输入的开始
      • (?=(?:\d{3})+$)
        -正向前瞻,以确保当前位置后有1个或多个3位数集
      • 替换只是一个字面上的逗号
      • 更多的解释可以在链接的演示中找到

      既然有一个内置函数,你为什么要使用正则表达式来实现这个目的?是什么阻碍了你?我正在学习正则表达式,所以我必须知道如何在PHP中使用正则表达式来处理字符串。@Fede:适用于有问题的数字,但是对于更大的数字会失败:)@Fade这对这个数字不起作用1222333444当有一个内置函数用于此目的时,为什么要使用正则表达式呢?是什么阻碍了你呢?我正在学习正则表达式,所以我必须知道如何使用正则表达式和PHP来处理字符串。@Fede:适用于有问题的数字,但适用于较大的数字:)@Fade这不适用于这个数字1222333444你能解释一下吗?如果OP的目标是学习它们,我认为在这里获得细节可能会很好。不管怎么说,捕获得很好,+1。非常感谢,这就是我需要的。当然可以添加解释(在执行此操作时收到了一个调用)@AlainTiemblo:正则表达式使用前瞻查找字符串中的位置,其中右边唯一的东西是三个数字的一个或多个分组。@AmalMurali:不带
      (?!^)
      111
      将变成
      ,111
      你能解释一下吗?如果OP的目标是学习它们,我认为在这里获得细节可能会很好。不管怎么说,捕获得很好,+1。非常感谢,这就是我需要的。当然可以添加解释(在执行此操作时收到了一个调用)@AlainTiemblo:正则表达式使用前瞻查找字符串中的位置,其中右边唯一的东西是三个数字的一个或多个分组。@AmalMurali:不带
      (?!^)
      111
      将变成
      ,111