价格正则表达逗号数千

时间:2015-06-24 21:16:49

标签: php regex preg-match

我正在努力想出一个能够匹配价格并涵盖所有基础的正则表达式。主要问题是(潜在的)逗号和小数位。

/^[^\d]*(?<price>\d+,?\d+\.\d+)/ 

是迄今为止我提出的最好的一个,但它与3.00不匹配,因为可选的两个\d+ \d+,我需要使左\d+可选。

(preg_match php)

在您将其标记为重复之前,我已经解释了它是如何不同的。在回答之后将其标记为重复是什么意义。

2 个答案:

答案 0 :(得分:1)

更改

$(-not [string]::IsNullOrEmpty($DHCPType))

\d+

\d* 表示一次或多次出现。 +表示零或更多;或者用其他词语可选。

答案 1 :(得分:-1)

带有模式组(?<price>(\d+((\.|\,)\d+)+))

的钱正则表达式

来源:

<?php

$input_line = "
£3.00
£30.00
€34.020,00
£35,000
£12,345,6789.100
";

preg_match_all("/(?<price>(\d+((\.|\,)\d+)+))/", $input_line, $matches);

var_dump($matches['price']);

结果:

array(5) {
  [0]=>
  string(4) "3.00"
  [1]=>
  string(5) "30.00"
  [2]=>
  string(9) "34.020,00"
  [3]=>
  string(6) "35,000"
  [4]=>
  string(15) "12,345,6789.100"
}

/(?<price>(\d+((\.|\,)\d+)+))/的解释:

  • (?<price>(\d+((\.|\,)\d+)+))命名捕获群组价格

  • 第二个捕获小组(\d+((\.|\,)\d+)+)

  • \d+将数字[0-9]与+匹配,以便在一次和无限次之间进行匹配

  • 第三次使用+

  • 捕获小组((\.|\,)\d+)+
  • 第4个捕获组(\.|\,)

    • 第一种选择:。匹配角色。字面上
    • 第二选择:\,匹配字符,字面意思