价格正则表达式以千为单位


Price regex commas thousands

我正试图想出一个正则表达式,它将匹配价格并覆盖所有基础。主要问题是(潜在的)逗号和小数点。

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

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

(preg_match php)

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

更改

'd+

'd*

+表示一次或多次出现。*表示零或更多;或者换句话说是可选的。

带有模式组(?<price>('d+(('.|',)'d+)+)) 的money正则表达式

来源:

<?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捕获组('.|',)

    • 第一种选择:。匹配字符。字面上
    • 第二个选项:'',与字符匹配,字面意思