ランダムな文字で区切られた電子メールのリストを取得できるフォームがあります: (コンマを使用するものもあれば、セミコロンまたは * を使用するものもあります)。このようなもの:
email1@example.com;email2@example.com,email3@example.com*email4@example.com
文字列を正規表現で分解する方法はありますか?
ほとんどの場合、ユーザーは同じセパレーターを入力しますが、ユーザーに排他的なセパレーターを強制したくありません。
preg_split関数を使用できます。
簡単な例と出力を次に示します。
<?php
$str = "email1@example.com;email2@example.com,email3@example.com*email4@example.com";
$finalString=preg_split("/[*,;]/",$str);
var_dump($finalString);
?>
出力:
array
0 => string 'email1@example.com' (length=18)
1 => string 'email2@example.com' (length=18)
2 => string 'email3@example.com' (length=18)
3 => string 'email4@example.com' (length=18)
完全な解決策として、 preg_match_all()を使用できます
$emails = preg_match_all(
"/[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}/i",
$emails,
$matches
);
$matches[0]配列にはすべてのメールが含まれます。
実際に見てみましょう:
(?<mail>[\w%+.-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6})