PHP如何从字符串中提取3位数并输出它

时间:2013-11-05 17:10:43

标签: php regex

这有点奇怪。我只想从字符串中获取连续的3位整数。

现在我以为我使用下面的代码成功地做到了...

preg_match_all('!\d+!', $image['title'], $integer); echo $integer[0][2];

但现在似乎在某些字符串上失败了。

它在这些字符串上工作正常......

  1. TZR9000 Supertroop 2014 001
  2. FZR Mode 900 Impact 2014 003配件
  3. NICE750 Destroyer 2014 020
  4. 但是它在这个字符串上失败了......

    1. 我们喜欢月亮2013 Stand 010
    2. 是否有另一种可能的方法可以成功提取3位数整数而不与其他整数混淆。我想它必须是一个聪明的PHP才能做到这一点。

      唯一一致的模式是,3位数字前面总是有一个空格,或者是3位数后的全站点或空格。

3 个答案:

答案 0 :(得分:2)

这取决于具体要求,但在您给出的示例中,您只需要数组的最后一个元素,因此您可以替换:

echo $integer[0][2];

使用:

echo end($integer[0]);

答案 1 :(得分:1)

最坚决的方式应该是

preg_match_all('!(\d{3})(?=(?:(?!\d{3}).)*$)!m', $str, $integer);

在此处查看此操作:http://regex101.com/r/pJ0xN4

这里也是一个结构性解释:

Regular expression visualization

答案 2 :(得分:0)

当前的正则表达式提取标题中的所有数字序列。为了只提取最后三位数,我们可以使用一个正则表达式,它只抓取标题中的最后一个序列(前一个空格和“行尾”= $) - 我们总是会得到结果结果数组的第一项:

$str = "TZR9000 Supertroop 2014 001";
preg_match_all('! (\d+)$!', $str, $integer); 
echo $integer[0][0];

$str = "We like the moon 2013 Stand 010";
preg_match_all('! (\d+)$!', $str, $integer); 
echo $integer[0][0];

<强>输出:
001 010