对不起标题,我不知道如何更好地解释它。
我必须从以下字符串中获取 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);
但是,我不知道如何正确使用正则表达式。
我希望有人可以帮助我!
非常感谢!
答案 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