2012-02-22 51 views
0

试图分裂一个字符串,但我不想“删除”我正在寻找...preg_split无需替换?

的字符串是这样的:

MDVB,94010,(555)555- 5555,KHII,94015,(555)555-5555,POONHY,94010,(555)555-5555,

我想在电话号码后拆分字符串,但我不想删除号码。 ..

现在,我有这样的:

preg_split("/\(? (\d{3})? \)? (?(1) [\-\s]) \d{3}-\d{4}/x", $string) 

但是,输出:

Array 
(
    [0] => MDVB, 94010, 
    [1] => KHII, 94015, 
    [2] => POONHY, 94010, 
) 

我想使preg_split是使用的东西...有没有别的东西,我应该使用?

+0

看你的字符串,你可能可以使用爆炸( '',$字符串); – Shattuck 2012-02-22 18:34:21

+0

不,它实际上是一个完整的地址行,但由于数据包含家庭地址,社会安全号码等,我不想发布完整的东西,所以简化了数据...字符串看起来更像名称,地址,城市,州,邮编,电话,传真,ssn – Scooter5150 2012-02-22 18:40:12

回答

0

您可以使用PREG_SPLIT_DELIM_CAPTURE选项,这将导致捕获并返回分隔符模式中的括号表达式。

$parts = preg_split("/\(? (\d{3})? \)? (?(1) [\-\s]) \d{3}-\d{4}/x", 
        $string, 
        null, 
        PREG_SPLIT_DELIM_CAPTURE); 

结果数组:

array(7) { 
    [0]=> 
    string(13) "MDVB, 94010, " 
    [1]=> 
    string(3) "555" 
    [2]=> 
    string(15) ", KHII, 94015, " 
    [3]=> 
    string(3) "555" 
    [4]=> 
    string(17) ", POONHY, 94010, " 
    [5]=> 
    string(3) "555" 
    [6]=> 
    string(1) "," 
} 

我相信这是你要找的人的行为。

+0

不,我正在寻找[0] => MDVB,94010,(555)555-5555 [1] KHII,94015,(555)555-5555 [ 3] => POONHY,94010,(555)555-5555 – Scooter5150 2012-02-22 18:41:41

+0

我复制的正则表达式的一部分在捕获组“()”中没有电话号码,因此它不被捕获。将完整的手机添加到捕获,它将成为返回数组的一部分。 – drew010 2012-02-22 19:06:50

1

您应该使用preg_match_all()来提取部分字符串。

<?php 
$string = "MDVB, 94010, (555) 555-5555, KHII, 94015, (555) 555-5555, POONHY, 94010, (555) 555-5555,"; 

$res = preg_match_all("/([A-Z]+,\s+\d+,\s+\(\d{3}\) \d{3}-\d{4})/",$string,$matches); 
print_r($matches); 
?> 

输出:

Array 
(
    [0] => Array 
     (
      [0] => MDVB, 94010, (555) 555-5555 
      [1] => KHII, 94015, (555) 555-5555 
      [2] => POONHY, 94010, (555) 555-5555 
     ) 

    [1] => Array 
     (
      [0] => MDVB, 94010, (555) 555-5555 
      [1] => KHII, 94015, (555) 555-5555 
      [2] => POONHY, 94010, (555) 555-5555 
     ) 

) 
0

你应该更好地使用preg_match_all这样的:

preg_match_all("/(.*?(?:\(? (?:\d{3})? \)? [\-\s])? \d{3}-\d{4})[^,]*(?:,|$)\s*/x", 
       $string, $arr); 
print_r($arr[1]); 

OUTPUT:

Array 
(
    [0] => MDVB, 94010, (555) 555-5555 
    [1] => KHII, 94015, (555) 555-5555 
    [2] => POONHY, 94010, (555) 555-5555 
) 
0
$string = "MDVB, 94010, (555) 555-5555, KHII, 94015, (555) 555-5555, POONHY, 94010, (555) 555-5555,"; 
preg_match_all("/[A-Za-z]+, \d+, \(\d{3}\) \d{3}-\d{4}/", $string, $matches, PREG_SET_ORDER); 

结果:

var_dump($matches); 

array (
    0 => 
    array (
    0 => 'MDVB, 94010, (555) 555-5555', 
), 
    1 => 
    array (
    0 => 'KHII, 94015, (555) 555-5555', 
), 
    2 => 
    array (
    0 => 'POONHY, 94010, (555) 555-5555', 
), 
)