繁体   English   中英

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

[英]PHP how to extract 3 digits from a string and output it

这是一个奇怪的问题。 我正在尝试从字符串中获取连续的3位整数。

现在我以为我可以使用下面的代码成功完成此操作...

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

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

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

  1. TZR9000超级部队2014 001
  2. FZR模式900 Impact 2014 003配件
  3. NICE750驱逐舰2014 020

但是然后在这个字符串上失败了...

  1. 我们喜欢月亮2013展位010

是否有另一种可能的方法可以成功提取3位整数而又不会与其他整数混淆。 我想这将是一个聪明的PHP来做到这一点。

唯一一致的模式是,在3位数字的前面总是有一个空格,在3位数字的后面是句号或空格。

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

echo $integer[0][2];

与:

echo end($integer[0]);

最可靠的方法应该是

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

在此处查看其运行情况: http : //regex101.com/r/pJ0xN4

这也是结构上的解释:

正则表达式可视化

当前的正则表达式提取标题中的所有数字序列。 为了只提取最后三位数字,我们可以使用一个仅捕获标题中最后一个序列的正则表达式(空格,行前和“行尾” = $ )-我们始终将结果保留在结果数组:

$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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM