我有太多的字符串不是一般模式。所有都有数字,但我需要得到包含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中做到这一点?
答案 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位数字。
循环匹配并获取长度为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);