一个关于货币匹配的正则表达式

在搜狗笔试中遇到一个题,说让用正则表达式匹配货币,货币的格式如下:

1,234,234.56 小数点保留两位。

当时写的不太正确,现在好好思考了一下,需要注意的地方有两点:

  1. 排除非货币的情况,也就是说货币的首位不为0,也就是不能匹配02,234.56
  2. 如果是0.56的情况也要匹配到.

现将自己的 正则表达式写出来,如果网友有什么好的正则表达式,一定要告诉我。

1 ^([1-9][0-9]{0,2}(,[0-9]{3})*|0)\.[0-9]{2}

思路如下,分成两种情况,一种是2,456,345.56,另一种是0.56的情况。

第一种情况:首位不为0,所以首先是[1-9],但是第一部分最高可能有3位,最低1位,所以也就是[1-9][0-9]{0,2},然后将,456看成一个模式,所以子模式是(,[0-9]{3}),可能有多个子模式,所以有(,[0-9]{3})*,所以第一种情况也就是[1-9][0-9]{0,2}(,[0-9]{3})*

第二种情况:也就是个位数为0,只有小数的情况,此时应该匹配0

所以加上小数的匹配部分也就是上面的结果

posted @ 2012-10-03 09:54  bjtulq  阅读(1307)  评论(0)    收藏  举报