我正在写PHP脚本,它将识别银行付款报告。 例如,我有这段代码:
$str = "Customer Name /First Polises number - SAT431223 (5.20 eur), BOS32342 (33,85 euro), (32,10 eiro), (78.66 €), €1232,2, (11.45)"
我需要在字符串中找到所有这些货币组合,所以输入如下:
5.20
33.85
32.10
78.66
1232.20
11.45
我该怎么做?我知道函数preg_match(),但我不明白如何为这种情况编写模式。
答案 0 :(得分:3)
preg_match
只会找到您找到的第一个匹配项。但您可以使用preg_match_all
来获取所有匹配项的数组。
以下是您需要了解的有关如何构建正则表达式模式的所有内容: http://php.net/manual/en/reference.pcre.pattern.syntax.php
您需要这样的模式:/[0-9]+[,.]{1}[0-9]{2}/
/
- 分隔符,可以是其他字符,但在模式的开头和结尾需要它。
[0-9]
- 匹配数字
+
和{1}
以及{2}
- 他们定义了数量的字符。 +
是"一个或多个",{}
中的数字是确切的字符数。
[,.]{1}
- 这与{1}
集中的一个(,.
)字符完全匹配。
示例代码:
$matches = array();
preg_match_all('/[0-9]+[,.]{1}[0-9]{2}/', $str, $matches);
var_dump($matches);
结果:
array (size=1)
0 =>
array (size=5)
0 => string '5.20' (length=4)
1 => string '33,85' (length=5)
2 => string '32,10' (length=5)
3 => string '78.66' (length=5)
4 => string '11.45' (length=5)
答案 1 :(得分:0)
我会这样做:
/([0-9]+[,.][0-9]+)/g
匹配
正则表达式的示例和更详细的细分:https://regex101.com/r/eH6aX6/1
这将匹配提供的句子中的任何double
值,这些值不一定是货币......
希望它指出正确的方向