2017-08-01 7 views
0

私が持っている場合:正規表現 - コンマ区切りの電子メールで停止しますか?

[email protected][email protected]

を私は唯一私が使用して、最初の電子メールアドレスをしたい:

'/([^\s][email protected][^\s]+)/s' 

しかし、場合提供されたデータには次のようなスペースはありません:

me @ myremail.com、you @ youremail.com

私の表現は文字列全体を与えます。両方の例で最初のメールアドレスを取得するにはどうすればよいですか?私のフィドル:https://regex101.com/r/rJ6b9n/1

+0

パターンはあまり良くありません。あなたがスペースを持っていても、それはコンマにマッチします... – marekful

+0

どのように恥ずかしい - 私は気付かなかった! – Warren

答えて

0

を参照してください。

^(([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.-_]+))

これは最初のメールになります。

あなたが^を削除した場合、それはあなたの正規表現は、キャプチャグループであるので、あなたはこのようにそれを行うことができ、文字列

0

あなたはカンマを追加することができますし、それが([^ \ s]は+ @ [^ \ s]は+)最初のを見つけるだろう、

が、それはあなたがグループ1

にメールで見つかります regexを参照してください
0

あなただけそれはあなたが」と、この正規表現を使用することができますすべての電子メールが必要な場合は正規表現の末尾にカンマを追加し、最初のグループ

([^\s][email protected][^\s^]+),

を取得するには十分だ最初の電子メールアドレスが必要な場合グローバル "フラグ

[,\s]*([^\s][email protected][^\s^]+)[,\s]*

そのパターンで始まる示すために使用^https://regex101.com/r/rJ6b9n/4

0

にあるすべてのメールを選んだだろう:

を([^ \ s]は+ @ [^\)+] S \、

0

私が仕事を行うには、2つの方法を参照してください。

$emails = array(
    '[email protected], [email protected]', 
    '[email protected],[email protected]', 
); 

// first approch, preg_match 
// find email followed by a comma 
foreach($emails as $email) { 
    preg_match('/\[email protected]\S+?(?=,)/', $email, $matches); 
    print_r($matches); 
} 
echo "=======================================================\n"; 

// second approch, preg_split 
foreach($emails as $email) { 
    echo preg_split('/,/', $email)[0],"\n"; 
} 

を出力:

Array 
(
    [0] => [email protected] 
) 
Array 
(
    [0] => [email protected] 
) 
======================================================= 
[email protected] 
[email protected] 
関連する問題