如何在PHP中的字符串中并排找到11位数字?

时间:2018-01-23 07:14:50

标签: php

我有太多的字符串不是一般模式。所有都有数字,但我需要得到包含11个字符"仅数字#34;在这个字符串中。例如:

"John Doe 12345 12345678910 123456789123456 12:22:54 Transfer from atm"
"John Doe 12:22:54 123456789123456 Transfer from atm 12345678910"

对于这些字符串我必须得到" 12345678910"只要。所以没有一般​​模式。字符串可以包含多于11个字符的数字。所以我只得到11个字符数字!我怎么能在PHP中做到这一点?

2 个答案:

答案 0 :(得分:1)

您可以使用preg_match获得所需的11位数字:

<?php

$string = '"John Doe No:12345 Id:12345678910 Key:123456789123456 12:22:54 Transfer from atm"';

if(preg_match('#(\D|\b)([\d]{11})(\D|\b)#', $string, $matches) != false){
    print_r($matches[2]);
}

输出

12345678910

正则表达式解释

(\D|\b)\D表示非数字字符,\b表示字边界。 | OR 运算符。所以这个组将匹配非数字字符或字边界。 (字符串开头,空格)

([\d]{11})\d表示数字。 {11}建议我们只匹配数字11次,不多也不少。这是我们需要捕捉的主要群体。

(\D|\b):重复第一组只是为了支持字符串或字边界的结束。

$matches[2] 将始终保持所需的11位数字。

答案 1 :(得分:-1)

根据您的问题,您需要提取11位数字。

  1. 将字符串传递给正则表达式并提取所有数字子字符串
  2. 循环匹配并获取长度为11个字符的数字。

    $str = "John Doe 12345 12345678910 123456789123456 12:22:54 Transfer from atm";
    
    preg_match_all('/\d+/', $str, $matches);
    
    $_value= null;
    
    foreach($matches[0] as $value){
    
    if(strlen($value)==11)
        $_value = $value;
    }
    print_r($_value);