2017-06-05 14 views
1

所以,我必須給我的字符串的這個名單如下:查找以前的電話號碼文本

David palmer & Betsy Harrell 229-548-9651 Emily 

我知道如何這樣做是爲了獲取電話號碼的是字符串:

preg_match_all('/[0-9]{3}[\-][0-9]{3}[\-][0-9]{4}/', $text, $matches); 
$matches = $matches[0]; 

但我需要事先得到名字和電話號碼。這有點超出了我的正則表達式知識。所以,我需要

David palmer & Betsy Harrell 

229-548-9651 
+0

只需在您的正則表達式前加上'。*'? – horcrux

回答

1

使用捕獲組得到兩子:

$s = 'David palmer & Betsy Harrell 229-548-9651 Emily'; 
if (preg_match('~^(.*?)\s*(\d{3}-\d{3}-\d{4})~', $s, $m)) { 
    echo $m[1] . "\n" . $m[2]; 
} 

PHP demo

圖案的詳細資料

  • ^ - 串
  • (.*?)開始 - 任何0+字符不是換行字符儘可能少到第一其它...
  • \s* - 0+空格
  • (\d{3}-\d{3}-\d{4}) - 日期格式(3位數字,-,3位數字,-,4位數字)。

請注意,您不需要將-放入字符類中,也無需將其轉義到字符類之外。 \d等於[0-9]如果您不使用任何與Unicode相關的特定修飾符/ PCRE動詞。