带有第n个

时间:2016-05-19 18:47:27

标签: php preg-match

这是一个字符串:

N%3A171717%2CN%3A%747474%2CN%3A555666%2CN%3A1234567&安培; BBN = 555666

从这个字符串中我如何提取 1234567 ?需要一个好的逻辑/语法。

我猜preg_match比PHP中的爆炸功能更好。

它是关于提取数据的PHP脚本。数字可以变化,数字的出现也可以变化,只有%2Cn%3A总是在数字前面。结尾总是有一个& bbn = anyNumber

2 个答案:

答案 0 :(得分:3)

这看起来像编码网址的一部分,因此必然会有更好的方法来实现,但urldecoded()您的字符串如下所示:

  

N:171717,N:t7474,N:555666,N:1234567&安培; BBN = 555666

所以:

preg_match_all('/n:(\d+)/', urldecode($string), $matches);
echo array_pop($matches[1]);

括号内的匹配位于$matches[1],因此只需array_pop()即可获得最后一个元素。

如果&bbn=可以在任何地方(开头除外),那么:

preg_match('/n:(\d+)&bbn=/', urldecode($string), $matches);
echo $matches[1]; 

答案 1 :(得分:1)

  

只有%2Cn%3A将始终位于数字前面

urldecoded相当于%2Cn%3A,n:
最后一个"封闭边界" &bbn保持不变。
preg_match函数将完成这项工作:

preg_match("/(?<=,n:)\d+(?=&bbn)/", urldecode("n%3A171717%2Cn%3A%747474%2Cn%3A555666%2Cn%3A1234567&bbn=555666"), $m);

print_r($m[0]);  // "1234567"