PHP在字符串中查找多个货币编号

时间:2016-01-29 08:27:14

标签: php

我正在写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(),但我不明白如何为这种情况编写模式。

2 个答案:

答案 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

匹配

  • 数字(零次或多次)
  • 点或逗号
  • 数字(零次或多次)
  • 请注意g:全球以获得所有比赛

正则表达式的示例和更详细的细分:https://regex101.com/r/eH6aX6/1

这将匹配提供的句子中的任何double值,这些值不一定是货币......

希望它指出正确的方向