代码之家  ›  专栏  ›  技术社区  ›  Juned Ansari

从字符串中提取5或6位数字

  •  1
  • Juned Ansari  · 技术社区  · 6 年前

    我只想从字符串中提取5或6位数字。下面是我尝试过的代码,但并不像预期的那样。

    $str1 = "21-114512"; //it should return 114512      
    $str2 = "test12345abcd"; //it should return 12345   
    $str3 = "12test123456testing"; //it should return 123456    
    
    function extract_numbers($string)
    {
       preg_match_all('/\b[^\d]*\d{6}[^\d]*\b/', $string, $match);
    
       return $match[0];
    }
    
    print_r(extract_numbers($str1));
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   mickmackusa Tom Green    6 年前

    寻找和一个范围量词应该做到这一点。

    模式逻辑说找到一个5或6位数字的序列,然后在匹配的数字前后查找,以确保两边都没有数字。

    代码(代码) Demo )

    $strings = [
        "21-114512",
        "test12345abcd",
        "12test123456testing",
        "123456",
        "1234",
        "12345a67890"
    ];
    function extract_numbers($string)
    {
       return preg_match_all('/(?<!\d)\d{5,6}(?!\d)/', $string, $match) ? $match[0] : [];
    }
    foreach ($strings as $string) {
        var_export(extract_numbers($string));
        echo "\n---\n";
    }
    

    输出:

    array (
      0 => '114512',
    )
    ---
    array (
      0 => '12345',
    )
    ---
    array (
      0 => '123456',
    )
    ---
    array (
      0 => '123456',
    )
    ---
    array (
    )
    ---
    array (
      0 => '12345',
      1 => '67890',
    )
    ---