2016-07-15 46 views
-2

我有遺憾的地方電話號碼和電子郵件被連接這樣的字符串:正則表達式來單獨級聯電話號碼和電子郵件

$phone_email = "[email protected]";

我希望能最後一位數字和首字母之間的分裂。

$phone = "617.651.3123"; 
$email = "[email protected]"; 

我使用PHP,但希望該戰略將是任何語言直白所需的輸出。

編輯

我試過很多事情,比如試圖通過簡單地刪除數字搶電子郵件。 $email = preg_replace('#^\d+#', '', $phone_email);導致僅去除617無視.

+1

向我們展示你已經嘗試什麼,什麼沒」工作。然後,我們有一些開始。另外,請用英文描述您希望以正則表達式實施的規則。你怎麼知道什麼是電話號碼和什麼是電子郵件? –

+0

@anubhava:如果電子郵件地址以數字開頭,那麼這將被打破。 –

+0

@AndyLester我嘗試了很多事情,包括試圖通過刪除數字來簡單地獲取電子郵件。 '$ email = preg_replace('#^ \ d +#','',$ phone_email);'這樣只會刪除'617'而忽略'.'。 –

回答

1

正如其他人指出的那樣,在「最後一個數字和第一個字母」之間進行拆分可能不是一個好策略,因爲電子郵件地址可以以數字開頭。儘管如此,我相信這樣做你問大概什麼:

$phone_email = "[email protected]"; 

$matches = []; 
preg_match("/([^a-zA-Z]*)(.*)/", $phone_email, $matches); 

$phone = $matches[1]; 
$email = $matches[2]; 

echo "Phone: $phone\n"; 
echo "Email: $email\n"; 

// Output: 
// Phone: 617.651.3123 
// Email: [email protected] 
+0

謝謝,怎麼趕上'$ phone_email'缺少電話號碼的地方? –

+0

'@'可以有一些捕獲嗎? –

+1

看我的編輯。在第一次捕獲中使用'*'而不是'+'。 – smarx

1

簡單的解決方案是:

$phone_email = "[email protected]"; 
$ms = array(); 
preg_match("/(.*\d)([a-z].*)/", $phone_email, $ms); 
print_r($ms); 

當然情況時的電子郵件與一些不被認爲是開始。

+0

我不認爲這甚至適用於您測試過的輸入,對吧? – smarx

+0

對不起!我誤讀了。 – smarx

+0

我唯一剩下的建議是處理大寫字母,儘管我承認原始問題是非常不明確的。 – smarx

1

後分裂數字和點重複次數

print_r(preg_split('/(\d+\.?)+\K/', $phone_email,2)); 

demo

+1

輸出:'Array ( [0] => 617. [1] => [email protected] )' – smarx

+1

我已更新答案 – splash58