0

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

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

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

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

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

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

但后来它在这个字符串上失败了......

  1. 我们喜欢月亮 2013 Stand 010

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

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

4

3 回答 3

2

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

echo $integer[0][2];

和:

echo end($integer[0]);
于 2013-11-05T17:13:55.900 回答
1

最可靠的方法应该是

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

在这里查看它的实际效果:http ://regex101.com/r/pJ0xN4

这也是一个结构解释:

正则表达式可视化

于 2013-11-05T19:10:18.553 回答
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

于 2013-11-05T17:35:30.120 回答