使用php preg_match()无法匹配最后一组数字

时间:2018-01-12 17:29:03

标签: php regex

preg_match_all("/(\d{12})
(?:,|$)/","111762396541,561572500056,561729950637,561135281443",$matches);

的var_dump($ MATHES):

array (size=2)
  0 => 
    array (size=4)
      0 => string '561762396543,' (length=13)
      1 => string '561572500056,' (length=13)
      2 => string '561729950637,' (length=13)
      3 => string '561135281443' (length=12)
  1 => 
    array (size=4)
      0 => string '561762396543' (length=12)
      1 => string '561572500056' (length=12)
      2 => string '561729950637' (length=12)
      3 => string '561135281443' (length=12)

但我希望这样的$匹配:

array (size=4)
  0 => string '561762396543,' (length=13)
  1 => string '561572500056,' (length=13)
  2 => string '561729950637,' (length=13)
  3 => string '561135281443' (length=12)

我想匹配数字组(每个都有12位数)和一个后缀逗号(如果有)。例程是最后一组数字,它不必匹配逗号,因为它到达行尾。

1 个答案:

答案 0 :(得分:1)

请改为尝试:

preg_match_all("/(\d{12}(?:,|$))/","111762396541,561572500056,561729950637,561135281443",$matches);

当$在你的角色范围括号[]内时,它正在寻找$字符而不是行尾。

编辑:如果你想在你的比赛中加入逗号,那么只需使用上面的代码示例并查看$ matches [0]。

如果你想要一个更容易的语法来匹配任何类型的单词边界,\ b也会匹配逗号和行尾: preg_match_all(" /(\ d {12} \ B)/"" 111762396541,561572500056,561729950637,561135281443",$匹配);