0

ランダムな文字で区切られた電子メールのリストを取得できるフォームがあります: (コンマを使用するものもあれば、セミコロンまたは * を使用するものもあります)。このようなもの:

email1@example.com;email2@example.com,email3@example.com*email4@example.com

文字列を正規表現で分解する方法はありますか?

ほとんどの場合、ユーザーは同じセパレーターを入力しますが、ユーザーに排他的なセパレーターを強制したくありません。

4

4 に答える 4

3

このようなものから始める必要があります:

<?php
$test = preg_split ('/(;|,|\*)/', 'email1@example.com;email2@example.com,email3@example.com*email4@example.com');

var_dump($test);

ドキュメントデモ

于 2012-08-27T16:08:16.763 に答える
1

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)
于 2012-08-27T16:20:01.267 に答える
1

完全な解決策として、 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]配列にはすべてのメールが含まれます。

于 2012-08-28T05:21:21.957 に答える
0

実際に見てみましょう:

(?<mail>[\w%+.-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6})
于 2012-08-27T16:10:50.567 に答える