返回字符串中10位数联系号码之前的字符串

时间:2014-06-16 12:34:25

标签: php string

您好我无法编写返回所有子字符串的PHP代码(紧接在10位数之前)。

输入字符串是" 8826835575 jagadish jagadish82017@gmail.com varanasi 221311是na是1 na 9560153352 jaggu jagdish@vedittechnologies.com delhi 123456是na是1 na 9555176779 jpkeshari jpjagadish@yahoo.com noida 221311是na是1 na"

所需的输出:

substring 1 =" 8826835575 jagadish jagadish82017@gmail.com varanasi 221311 yes na yes 1 na" substring 2 =" 9560153352 jaggu jagdish@vedittechnologies.com delhi 123456 yes na yes 1 na" substring 3 =" 9555176779 jpkeshari jpjagadish@yahoo.com noida 221311 yes na yes 1 na"

请帮帮我......

4 个答案:

答案 0 :(得分:1)

preg_split()很好但很神秘。这是另一种解决方案:

<?php
$input = "8826835575 jagadish jagadish82017@gmail.com varanasi 221311 yes na yes 1 na 9560153352 jaggu jagdish@vedittechnologies.com delhi 123456 yes na yes 1 na 9555176779 jpkeshari jpjagadish@yahoo.com noida 221311 yes na yes 1 na";

// 1. Replaces all 10 digits preceded by an space by an carriage return.
$output = preg_replace('#\s(\d{10})#', "\n$1", $input);

// 2. Stores the string by line by line in an array.
$output = explode("\n", $output);

// array (
//   0 => '8826835575 jagadish jagadish82017@gmail.com varanasi 221311 yes na yes 1 na',
//   1 => '9560153352 jaggu jagdish@vedittechnologies.com delhi 123456 yes na yes 1 na',
//   2 => '9555176779 jpkeshari jpjagadish@yahoo.com noida 221311 yes na yes 1 na',
// )
var_export($output);

答案 1 :(得分:0)

我认为您可以使用正则表达式分割的PHP函数轻松解决问题,preg-split使用模式/[0-9]{10}/

解决方案

<?php

 $subject =  "8826835575 jagadish jagadish82017@gmail.com varanasi 221311 yes na yes 1 na 9560153352 jaggu jagdish@vedittechnologies.com delhi 123456 yes na yes 1 na 9555176779 jpkeshari jpjagadish@yahoo.com noida 221311 yes na yes 1 na";

 $pattern = '/([0-9]{10})/';
 $val = preg_split ( $pattern , $subject, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

 for ($i=0; $i < count($val); $i+=2){
    print($val[$i].$val[$i+1]);
 }

?>

说明

首先通过preg_split拆分整体字符串,将10位数的任意组合作为分隔符。请注意,我们在此处使用选项PREG_SPLIT_DELIM_CAPTUREPREG_SPLIT_NO_EMPTY来捕获数字,以满足您的要求。

然后你有一个如下组织的数组:

[0] => first delimiter // your number
[1] => what follows
[2] => second delimiter // your second number
[3] => what follows
...

你只需要按照自己喜欢的方式合并生成的数组(我用dumb for cycle,你可以找到一个更好的PHP-nic方法来实现它)。结果将如下所示:

8826835575 jagadish jagadish82017@gmail.com varanasi 221311 yes na yes 1 na
9560153352 jaggu jagdish@vedittechnologies.com delhi 123456 yes na yes 1 na
9555176779 jpkeshari jpjagadish@yahoo.com noida 221311 yes na yes 1 na

答案 2 :(得分:0)

带有选项preg_split的PHP函数PREG_SPLIT_DELIM_CAPTURE返回一个交替10位数字,字符串等的数组。

$subject = '8826835575 jagadish jagadish82017@gmail.com varanasi 221311 yes na yes 1 na 9560153352 jaggu jagdish@vedittechnologies.com delhi 123456 yes na yes 1 na 9555176779 jpkeshari jpjagadish@yahoo.com noida 221311 yes na yes 1 na';
$result = preg_split( '/(\d{10})/', $subject ,'-1' , PREG_SPLIT_DELIM_CAPTURE);
array_shift($result);
for ( $ii = 0; $ii < count($result); $ii++ ) {
  print $result[$ii] . $result[++$ii] . '<br>';
}

第一个元素为空,因此shift关闭,然后遍历数组打印对。这些可以保存到另一个数组或变量而不是在这里打印。

输出:

8826835575 jagadish jagadish82017@gmail.com varanasi 221311 yes na yes 1 na 
9560153352 jaggu jagdish@vedittechnologies.com delhi 123456 yes na yes 1 na 
9555176779 jpkeshari jpjagadish@yahoo.com noida 221311 yes na yes 1 na

答案 3 :(得分:0)

如果你想要这个输出,你可以使用这样的东西:

$input = "8826835575 jagadish jagadish82017@gmail.com varanasi 221311 yes na yes 1 na 9560153352 jaggu jagdish@vedittechnologies.com delhi 123456 yes na yes 1 na 9555176779 jpkeshari jpjagadish@yahoo.com noida 221311 yes na yes 1 na";

$splited = preg_split('~(\d{10})~', $input, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_OFFSET_CAPTURE);
$lines = array_map(function($item) use ($input) {
    return substr($input, $item[1] - 10, 10) . $item[0];
}, $splited);
var_dump($lines);

如果你想创建一个关联数组,这可能是一个更好的输出,这将有所帮助:

$input = "8826835575 jagadish jagadish82017@gmail.com varanasi 221311 yes na yes 1 na 9560153352 jaggu jagdish@vedittechnologies.com delhi 123456 yes na yes 1 na 9555176779 jpkeshari jpjagadish@yahoo.com noida 221311 yes na yes 1 na";

$splited = preg_split('~(\d{10})~', $input, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
$i = 0;
$lines = array_reduce($splited, function($carry, $item) use (&$i) {
    ++$i % 2 ? array_push($carry, $item) : $carry[array_pop($carry)] = $item;
    return $carry;
}, array());
var_dump($lines);