PHP:使用preg_match,有限字符从字符串中获取值

时间:2015-09-01 01:29:48

标签: php regex

对不起标题,我不知道如何更好地解释它。

我必须从以下字符串中获取 354607

  

... jLHoiAAD1037的 354607 Ij0Ij1Ij2 ...

“354607”是动态的,但在任何情况下它都有“1037”,无论如何都是6个字符。

问题是,字符串长度约为50.000到1.000.000个字符。所以我想要一个资源友好的解决方案。

我尝试过:

preg_match_all("/1037(.*?){0,5}/", $new, $search1037);

preg_match_all("/1037(.*?{0,5})/", $new, $search1037);

但是,我不知道如何正确使用正则表达式。

我希望有人可以帮助我!

非常感谢!

2 个答案:

答案 0 :(得分:3)

使用,\ d {6}表示6个数字

preg_match_all("/1037(\d{6})/", $new, $search1037);

返回一个带

的数组
array(
    0   =>  array(
        0   =>  1037354607
    ),
    1   =>  array(
        0   =>  354607
    )
)

选中此demo

答案 1 :(得分:2)

由于您关注的是找到资源友好型解决方案,因此使用preg_match可能会更好 。正则表达式通常需要更多开销,如this SO question中所述。

相反,您可以使用strstr()

$string = strstr($string,'1037');

将返回' 1037'的第一个实例。在$string中,以及随后的所有内容。然后,使用substr()

$string = substr($string,4,6);

从{4}开始返回$string内的子字符串(位置0 = 1,位置1 = 0,位置2 = 3,位置3 = { {1}},位置4 = 6位数的开头)并包含6个字符。

为了好玩,一行:

7