我正在努力想出一个能够匹配价格并涵盖所有基础的正则表达式。主要问题是(潜在的)逗号和小数位。
/^[^\d]*(?<price>\d+,?\d+\.\d+)/
是迄今为止我提出的最好的一个,但它与3.00不匹配,因为可选的两个\d+ \d+
,我需要使左\d+
可选。
(preg_match php)
在您将其标记为重复之前,我已经解释了它是如何不同的。在回答之后将其标记为重复是什么意义。
答案 0 :(得分:1)
更改
$(-not [string]::IsNullOrEmpty($DHCPType))
到
\d+
\d*
表示一次或多次出现。 +
表示零或更多;或者用其他词语可选。
答案 1 :(得分:-1)
带有模式组(?<price>(\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"
}
对/(?<price>(\d+((\.|\,)\d+)+))/
的解释:
(?<price>(\d+((\.|\,)\d+)+))
命名捕获群组价格
第二个捕获小组(\d+((\.|\,)\d+)+)
\d+
将数字[0-9]
与+匹配,以便在一次和无限次之间进行匹配
第三次使用+
((\.|\,)\d+)+
第4个捕获组(\.|\,)