我正试图想出一个正则表达式,它将匹配价格并覆盖所有基础。主要问题是(潜在的)逗号和小数点。
/^[^'d]*(?<price>'d+,?'d+'.'d+)/
是我迄今为止想出的最好的一个,但它与3.00英镑不匹配,因为两侧的两个'd+ 'd+
是可选的,我需要使左侧的'd+
是可选的。
(preg_match php)
在您将其标记为重复之前,我已经解释了它的不同之处。在回答完之后,把它标记为重复有什么意义。
更改
'd+
到
'd*
+
表示一次或多次出现。*
表示零或更多;或者换句话说是可选的。
带有模式组(?<price>('d+(('.|',)'d+)+))
的money正则表达式
来源:
<?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捕获组
('.|',)
- 第一种选择:。匹配字符。字面上
- 第二个选项:'',与字符匹配,字面意思