Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:从带有preg_匹配的字符串中获取值,有限字符_Php_Regex - Fatal编程技术网

PHP:从带有preg_匹配的字符串中获取值,有限字符

PHP:从带有preg_匹配的字符串中获取值,有限字符,php,regex,Php,Regex,对不起,这个标题,我不知道如何更好地解释它 我必须从以下字符串中获取354607: …JLHOIAD1037354607IJ0IJ1IJ2 354607是动态的,但它在任何情况下都有1037,并且在任何情况下都正好有6个字符长 问题是,字符串的长度大约为50.000到1.000.000个字符。所以我想要一个资源友好的解决方案 我试了一下: preg_match_all("/1037(.*?){0,5}/", $new, $search1037); 以及: 但是,我不知道如何正确使用正则表达式

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

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

…JLHOIAD1037354607IJ0IJ1IJ2

354607是动态的,但它在任何情况下都有1037,并且在任何情况下都正好有6个字符长

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

我试了一下:

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

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

我希望有人能帮助我


非常感谢

Use,\d{6}表示6个数字

preg_match_all("/1037(\d{6})/", $new, $search1037);
返回一个带有

array(
    0   =>  array(
        0   =>  1037354607
    ),
    1   =>  array(
        0   =>  354607
    )
)

选中此项

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

preg_match_all("/1037(\d{6})/", $new, $search1037);
返回一个带有

array(
    0   =>  array(
        0   =>  1037354607
    ),
    1   =>  array(
        0   =>  354607
    )
)

选中此项

因为您关心的是找到一个资源友好的解决方案,所以最好不要使用preg_match。正则表达式通常需要更多的开销,如中所述

相反,您可以使用strstr:

它将返回$string格式的“1037”的第一个实例,以及它后面的所有内容。然后,使用substr:

它返回$string内的子字符串,从位置4开始,其中位置0=1,位置1=0,位置2=3,位置3=7,位置4=6位数字的开头,包括6个字符

为了好玩,在一行中:

$string = substr(strstr($string,'1037'),4,6);

因为您关心的是找到一个资源友好的解决方案,所以最好不要使用preg_match。正则表达式通常需要更多的开销,如中所述

相反,您可以使用strstr:

它将返回$string格式的“1037”的第一个实例,以及它后面的所有内容。然后,使用substr:

它返回$string内的子字符串,从位置4开始,其中位置0=1,位置1=0,位置2=3,位置3=7,位置4=6位数字的开头,包括6个字符

为了好玩,在一行中:

$string = substr(strstr($string,'1037'),4,6);

非常感谢。节省了我很多时间和难看的变通代码!我能再问你一个问题吗?如果我试图搜索06A906032HN,其中除9060和字母数字外的数字都是可变的,但每次都是相同的格式,例如XXX或Z9060XXZZ X代表意图,Z代表字母数字字母。。你知道怎么处理吗?在我的字符串中可能是这样的:06A906032HN,05B906032BC,036906012ALuse/\d{2}[a-zA-Z\d]9060\d{2}[a-zA-Z\d]{2}/,其中\d表示数字,[a-zA-Z\d]表示字母数字的小写和大写,哇,超级快速的答案!非常感谢。我只是忘记了一件事,更好地认识到这一点:最后两个字母数字可以是1或2个字符长。这可以整合吗?哈哈,我就在这附近。在最后一个{2}中,您可以设置像{1,2}这样的范围来指定1到2个字符,或者{2,5}来指定2到5个字符,依此类推。谢谢!!节省了我很多时间和难看的变通代码!我能再问你一个问题吗?如果我试图搜索06A906032HN,其中除9060和字母数字外的数字都是可变的,但每次都是相同的格式,例如XXX或Z9060XXZZ X代表意图,Z代表字母数字字母。。你知道怎么处理吗?在我的字符串中可能是这样的:06A906032HN,05B906032BC,036906012ALuse/\d{2}[a-zA-Z\d]9060\d{2}[a-zA-Z\d]{2}/,其中\d表示数字,[a-zA-Z\d]表示字母数字的小写和大写,哇,超级快速的答案!非常感谢。我只是忘记了一件事,更好地认识到这一点:最后两个字母数字可以是1或2个字符长。这可以整合吗?哈哈,我就在这附近。在最后一个{2}中,您可以设置像{1,2}这样的范围来指定1到2个字符,或者{2,5}来指定2到5个字符,依此类推。