2012-02-22 49 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', 
), 
)