【问题标题】:Price regex commas thousands [duplicate]价格正则表达式逗号千 [重复]
【发布时间】:2015-06-24 21:16:49
【问题描述】:

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

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

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

(preg_match php)

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

【问题讨论】:

  • 这个网站上有几十个骗子
  • 这与那个问题完全不同,它非常具体如何将匹配号更改为可选。
  • 不要只是断言它不是重复的 - 编辑问题以准确地解释其他答案如何无法解决您的特定问题。
  • 不要只是断言它是重复的。尝试阅读这两个问题。

标签: php regex preg-match


【解决方案1】:

改变

\d+

到一个

\d*

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

【讨论】:

    【解决方案2】:

    带有模式组(?&lt;price&gt;(\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"
    }
    

    /(?&lt;price&gt;(\d+((\.|\,)\d+)+))/的解释:

    • (?&lt;price&gt;(\d+((\.|\,)\d+)+))命名捕获团价

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

    • \d+ 将数字 [0-9] 与 + 匹配一次和无限次

    • 第 3 个捕获组 ((\.|\,)\d+)+ 再次使用 +

    • 第四捕获组(\.|\,)

      • 第一个备选方案:.匹配字符。字面意思
      • 第二种选择:\,匹配字符,字面意思

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-13
      • 2016-02-14
      • 1970-01-01
      • 2017-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多