preg_match():编译失败:在偏移量2处不重复

时间:2014-04-04 17:06:41

标签: php regex preg-match currency

我无法弄清楚为什么我的正则表达式会破裂。

我希望它匹配:

$ 100,000

100000

100000(我知道它不匹配,但我想要它)

preg_match("/^\$?(?!0.00)\d{1,3}(,\d{3})*(\.\d\d)?$/", $string);

那么我怎样才能使它与最后一个匹配,为什么我会收到这个错误?这个正则表达式在我的javascript检查中运行良好。

由于

2 个答案:

答案 0 :(得分:4)

你需要转义反斜杠才能使其成为字面值,因为它是作为PHP字符串语法的一部分转义美元符号。

preg_match("/^\\\$?(?!0.00)\d{1,3}(,\d{3})*(\.\d\d)?$/", $string);

或使用单引号而不是双引号:

preg_match('/^\$?(?!0.00)\d{1,3}(,\d{3})*(\.\d\d)?$/', $string);

要允许不带逗号的数字,您可以使用替换:

preg_match('/^\$?(?!0.00)(\d{1,3}(,\d{3})*|\d+)(\.\d\d)?$/', $string);

答案 1 :(得分:2)

添加两个斜杠

preg_match("/^\\\$?(?!0.00)\d{1,3}(,\d{3})*(\.\d\d)?$/", $string,$matches);
               ^^

代码

<?php
$string='$100,000';
preg_match("/^\\\$?(?!0.00)\d{1,3}(,\d{3})*(\.\d\d)?$/", $string,$matches);
print_r($matches);

<强> OUTPUT :

Array
(
    [0] => $100,000
    [1] => ,000
)

更新:如果您想匹配11000等数字,请使用下面一项,并注意更改:

preg_match("/^\\\$?(?!0.00)\d{1,3}(\,?\d{3})*(\.\d\d)?$/", $string,$matches);
                                     ^ here making the comma optional