2017-03-23 18 views
1

正規表現を使用して電子メールIDのローカル部分を取得しようとしています。 ここで問題になるのは、ローカル部分が2つの異なる形式になっていることです。私がどの形式を読み、その電子メールIDの代替形式を準備する必要があるのです。いつものように、これを行うコードのスニペットを下に貼り付けます。複数の電子メールID形式に一致するPHP正規表現

$testarray = array("[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]"); 

foreach($testarray as $emailID) { 
    preg_match("/([\w\d]*)\.([\w\d]*)@gmail.com/", $emailID, $match); 

    if ($match[2] == "tp") { 
    $altform = $match[1] . "@gmail.com"; 
    } else { 
    $altform = $match[1] . "[email protected]"; 
    } 

    error_log("ALTERNATE FORM OF $emailID IS $altform"); 

} 

私はここに直面してる問題は$match[1]$match[2]どちらも"[email protected]"のために何を一致させるように私は望ましい結果が届かないです。あなたは、ドット+単語を中心に、オプショングループを使用する必要が

+0

'するpreg_match()' '実際には$ match'を消費しようとする前に働いていたかどう.' \ –

+0

あなたの正規表現は、'完全な停止を期待されている文字を望ましい結果を共有してください、あなたがテストする必要があります – Scuzzy

答えて

1

は、グループが検索を実行した後にマッチしたかどうかを確認後、サブパターンを文字、そして:

foreach($testarray as $emailID) { 
    $altform = ""; 
    if (preg_match("/(\w+)(?:\.(\w+))[email protected]\.com/", $emailID, $match)) 
    { 
     if (!empty($match[2]) && $match[2] == "tp") { 
      $altform = $match[1] . "@gmail.com"; 
     } else { 
      $altform = $match[1] . "[email protected]"; 
     } 
    } 
    print_r("ALTERNATE FORM OF $emailID IS $altform\n"); 
} 

online PHP demoを参照してください。パターンに

  • (\w+) - キャプチャグループ1:一つ以上の単語文字
  • (?:\.(\w+))?から1または0の出現(これは?数量詞に対して)の:
    • \. - ドット
    • (\w+) - 捕捉グループ2:1つ以上の単語cha RS
  • @gmail\.com - 文字列リテラル@gmail.com(リテラルのドットに一致するようにエスケープされて.に注意してください)。
関連する問題