正则表达式在特定位置匹配除十进制或逗号以外的所有非数字

时间:2018-12-04 23:44:02

标签: php regex preg-match

这是我的电话号码:

$1,000,000.00
100000000.00
100000
$1,000.00
2.000,00
10000,00

我想得到:

1000000.00
100000000.00
100000
1000.00
2000,00
10000,00

这是我的正则表达式:

[^\d(,.{3})]

我想删除除小数点或逗号以外的所有非数字,如果它位于右侧的第3位。这可能吗?

1 个答案:

答案 0 :(得分:2)

字符集(或否定字符集)应仅 包含您要匹配的字符或不希望匹配的字符-如果要进行其他测试(例如所讨论的字符不在行尾附近),请在字符集的外部中进行这些测试。

在这里,您可以使用否定字符集

[^\d\n,.]

匹配非数字,换行符,逗号或句点的字符,并用

替换该字符集
[,.](?!\d{2}$)

,它将匹配句号和逗号,后跟两个数字和该行的末尾。全部:

[^\d\n,.]|[,.](?!\d{2}$)

并替换为空字符串。输出:

1000000.00
100000000.00
100000
1000.00
2000,00
10000,00

https://regex101.com/r/y0s1Bw/1