Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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 创建正则表达式模式以匹配空格分隔的字符串_Php_Regex - Fatal编程技术网

Php 创建正则表达式模式以匹配空格分隔的字符串

Php 创建正则表达式模式以匹配空格分隔的字符串,php,regex,Php,Regex,我有很多行的文件(超过32k)。行看起来像: 34 Item 5423 11Item 44 Item 第一个数字是IDs。我想制作关联数组:数组(“34”=>“项”,“5423”=>“11项”,“44”=>“项”) ID的长度可以是1到5(1-65366) 项目名称可以以数字开头 ID和项目名称之间至少有一个(但可以不止一个)空格 所以,主要的区别是空间或一定数量的空间。使用PHP。使用 i、 e 它将返回一个字符串数组。使用 i、 e 它将返回一个字符串数组。使用 i、 e 它将返回一

我有很多行的文件(超过32k)。行看起来像:

34 Item
5423 11Item
44    Item
第一个数字是IDs。我想制作关联数组:数组(“34”=>“项”,“5423”=>“11项”,“44”=>“项”)

  • ID的长度可以是1到5(1-65366)
  • 项目名称可以以数字开头
  • ID和项目名称之间至少有一个(但可以不止一个)空格
  • 所以,主要的区别是空间或一定数量的空间。使用PHP。

    使用

    i、 e

    它将返回一个字符串数组。

    使用

    i、 e

    它将返回一个字符串数组。

    使用

    i、 e

    它将返回一个字符串数组。

    使用

    i、 e


    它将返回一个字符串数组。

    这里有一个方法,它不检查数据的有效性,但可能有效。它根据空格分解每一行,并将结果放入
    $res
    关联数组中。
    有关信息,允许使用正则表达式拆分字符串

    $res = array();
    foreach($lines as $line) {
         $data = preg_split('/\s+/', $line);
         $res[$data[0]] = $data[1];     
    }
    
    如果您确实想检查您的条件,您可以添加一些
    If
    语句,ID限制为:

    $res = array();
    foreach($lines as $line) {
         $data = preg_split('/\s+/', $line);
         $idx = intval($data[0]);
         if($idx > 0 && $idx < 65366) // skip lines where the ID seems invalid
             $res[$data[0]] = $data[1];     
    }
    
    $res=array();
    foreach($line作为$line){
    $data=preg_split('/\s+/',$line);
    $idx=intval($data[0]);
    if($idx>0&&$idx<65366)//跳过ID似乎无效的行
    $res[$data[0]]=$data[1];
    }
    
    这里有一种方法,它不检查数据的有效性,但可能有效。它根据空格分解每一行,并将结果放入
    $res
    关联数组中。
    有关信息,允许使用正则表达式拆分字符串

    $res = array();
    foreach($lines as $line) {
         $data = preg_split('/\s+/', $line);
         $res[$data[0]] = $data[1];     
    }
    
    如果您确实想检查您的条件,您可以添加一些
    If
    语句,ID限制为:

    $res = array();
    foreach($lines as $line) {
         $data = preg_split('/\s+/', $line);
         $idx = intval($data[0]);
         if($idx > 0 && $idx < 65366) // skip lines where the ID seems invalid
             $res[$data[0]] = $data[1];     
    }
    
    $res=array();
    foreach($line作为$line){
    $data=preg_split('/\s+/',$line);
    $idx=intval($data[0]);
    if($idx>0&&$idx<65366)//跳过ID似乎无效的行
    $res[$data[0]]=$data[1];
    }
    
    这里有一种方法,它不检查数据的有效性,但可能有效。它根据空格分解每一行,并将结果放入
    $res
    关联数组中。
    有关信息,允许使用正则表达式拆分字符串

    $res = array();
    foreach($lines as $line) {
         $data = preg_split('/\s+/', $line);
         $res[$data[0]] = $data[1];     
    }
    
    如果您确实想检查您的条件,您可以添加一些
    If
    语句,ID限制为:

    $res = array();
    foreach($lines as $line) {
         $data = preg_split('/\s+/', $line);
         $idx = intval($data[0]);
         if($idx > 0 && $idx < 65366) // skip lines where the ID seems invalid
             $res[$data[0]] = $data[1];     
    }
    
    $res=array();
    foreach($line作为$line){
    $data=preg_split('/\s+/',$line);
    $idx=intval($data[0]);
    if($idx>0&&$idx<65366)//跳过ID似乎无效的行
    $res[$data[0]]=$data[1];
    }
    
    这里有一种方法,它不检查数据的有效性,但可能有效。它根据空格分解每一行,并将结果放入
    $res
    关联数组中。
    有关信息,允许使用正则表达式拆分字符串

    $res = array();
    foreach($lines as $line) {
         $data = preg_split('/\s+/', $line);
         $res[$data[0]] = $data[1];     
    }
    
    如果您确实想检查您的条件,您可以添加一些
    If
    语句,ID限制为:

    $res = array();
    foreach($lines as $line) {
         $data = preg_split('/\s+/', $line);
         $idx = intval($data[0]);
         if($idx > 0 && $idx < 65366) // skip lines where the ID seems invalid
             $res[$data[0]] = $data[1];     
    }
    
    $res=array();
    foreach($line作为$line){
    $data=preg_split('/\s+/',$line);
    $idx=intval($data[0]);
    if($idx>0&&$idx<65366)//跳过ID似乎无效的行
    $res[$data[0]]=$data[1];
    }
    
    与命名捕获组一起使用:

    preg_match('/^(?<id>\d+)\s+(?<name>[\w ]+)$/', $row, $matches);
    
    示例输出:

    Array
    (
        [34] => Item
        [5423] => 11Item
        [44] => Item
        [3470] => BLABLA TEF2200
    )
    

    与命名的捕获组一起使用:

    preg_match('/^(?<id>\d+)\s+(?<name>[\w ]+)$/', $row, $matches);
    
    示例输出:

    Array
    (
        [34] => Item
        [5423] => 11Item
        [44] => Item
        [3470] => BLABLA TEF2200
    )
    

    与命名的捕获组一起使用:

    preg_match('/^(?<id>\d+)\s+(?<name>[\w ]+)$/', $row, $matches);
    
    示例输出:

    Array
    (
        [34] => Item
        [5423] => 11Item
        [44] => Item
        [3470] => BLABLA TEF2200
    )
    

    与命名的捕获组一起使用:

    preg_match('/^(?<id>\d+)\s+(?<name>[\w ]+)$/', $row, $matches);
    
    示例输出:

    Array
    (
        [34] => Item
        [5423] => 11Item
        [44] => Item
        [3470] => BLABLA TEF2200
    )
    

    您可以使用以下功能:

    $data = <<<'LOD'
    34 Item
    5423 11Item
    44    Item
    546
    65535 toto le héros
    65536 belzebuth
    glups  glips
    LOD;
    
    $result = array();
    
    $line = strtok($data, "\r\n");
    
    while($line!==false) {
        $tmp = preg_split('~\s+~', $line, 2, PREG_SPLIT_NO_EMPTY);
        if (count($tmp)==2 && $tmp[0]==(string)(int)$tmp[0] && $tmp[0]<65536)
            $result[$tmp[0]] = $tmp[1];
        $line = strtok("\r\n");
    }
    print_r($result);
    
    $data=您可以使用:

    $data = <<<'LOD'
    34 Item
    5423 11Item
    44    Item
    546
    65535 toto le héros
    65536 belzebuth
    glups  glips
    LOD;
    
    $result = array();
    
    $line = strtok($data, "\r\n");
    
    while($line!==false) {
        $tmp = preg_split('~\s+~', $line, 2, PREG_SPLIT_NO_EMPTY);
        if (count($tmp)==2 && $tmp[0]==(string)(int)$tmp[0] && $tmp[0]<65536)
            $result[$tmp[0]] = $tmp[1];
        $line = strtok("\r\n");
    }
    print_r($result);
    
    $data=您可以使用:

    $data = <<<'LOD'
    34 Item
    5423 11Item
    44    Item
    546
    65535 toto le héros
    65536 belzebuth
    glups  glips
    LOD;
    
    $result = array();
    
    $line = strtok($data, "\r\n");
    
    while($line!==false) {
        $tmp = preg_split('~\s+~', $line, 2, PREG_SPLIT_NO_EMPTY);
        if (count($tmp)==2 && $tmp[0]==(string)(int)$tmp[0] && $tmp[0]<65536)
            $result[$tmp[0]] = $tmp[1];
        $line = strtok("\r\n");
    }
    print_r($result);
    
    $data=您可以使用:

    $data = <<<'LOD'
    34 Item
    5423 11Item
    44    Item
    546
    65535 toto le héros
    65536 belzebuth
    glups  glips
    LOD;
    
    $result = array();
    
    $line = strtok($data, "\r\n");
    
    while($line!==false) {
        $tmp = preg_split('~\s+~', $line, 2, PREG_SPLIT_NO_EMPTY);
        if (count($tmp)==2 && $tmp[0]==(string)(int)$tmp[0] && $tmp[0]<65536)
            $result[$tmp[0]] = $tmp[1];
        $line = strtok("\r\n");
    }
    print_r($result);
    

    $data=Why not
    $cont=file\u get\u contents($file);preg_match_all('/^(?\d+)\s+(?\w+)$/m',$cont,$matches)?@SharanyaDutta:有超过32K行(正如他在问题中所说的),所以速度可能会很慢。如果他已经遍历了所有行,
    preg\u match()
    会更合适。非常感谢。它在一种情况下工作良好,但不正确:当字符串以数字结尾时。例如:3470 BLABLA TEF2200 In$matches['id']我得到:。。。3470 2200 ... 但应该只有3470@MaximDroy:啊。我也更新了正则表达式来处理空格。我还添加了一个示例和一个演示,以帮助您更好地理解它。干杯为什么不
    $cont=file\u get\u contents($file);preg_match_all('/^(?\d+)\s+(?\w+)$/m',$cont,$matches)?@SharanyaDutta:有超过32K行(正如他在问题中所说的),所以速度可能会很慢。如果他已经遍历了所有行,
    preg\u match()
    会更合适。非常感谢。它在一种情况下工作良好,但不正确:当字符串以数字结尾时。例如:3470 BLABLA TEF2200 In$matches['id']我得到:。。。3470 2200 ... 但应该只有3470@MaximDroy:啊。我也更新了正则表达式来处理空格。我还添加了一个示例和一个演示,以帮助您更好地理解它。干杯为什么不
    $cont=file\u get\u contents($file);preg_match_all('/^(?\d+)\s+(?\w+)$/m',$cont,$matches)?@SharanyaDutta:有超过32K行(正如他在问题中所说的),所以速度可能会很慢。如果他已经遍历了所有行,
    preg\u match()
    会更合适。非常感谢。它在一种情况下工作良好,但不正确:当字符串以数字结尾时。例如:3470 BLABLA TEF2200 In$matches['id']我得到:。。。3470 2200 ... 但应该只有3470@MaximDroy:啊。我也更新了正则表达式来处理空格。我还添加了一个示例和一个演示,以帮助您更好地理解它。干杯为什么不
    $cont=file\u get\u contents($file);preg_match_all('/^(?\d+)\s+(?\w+)$/m',$cont,$matches)?@SharanyaDutta:有超过32K行(正如他在问题中所说的),所以速度可能会很慢。如果他已经遍历了所有行,
    preg\u match()
    会更合适。非常感谢。它在一种情况下工作良好,但不正确:当字符串以数字结尾时。例如:3470废话