By using our mini forum, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy

Q: Extract Emails - Regex Task

+2 votes

Write a program to extract all email addresses from a given text. The text comes at the only input line. Print the emails on the console, each at a separate line. Emails are considered to be in format <user>@<host>, where:

 <user> is a sequence of letters and digits, where '.', '-' and '_' can appear between them.

  • Examples of valid users: "stephan", "mike03", "s.johnson", "st_steward", "softuni-bulgaria", "12345".
  • Examples of invalid users: ''--123", ".....", "nakov_-", "_steve", ".info".

<host> is a sequence of at least two words, separated by dots '.'. Each word is sequence of letters and can have hyphens '-' between the letters.

  • Examples of hosts: "", "", "", "".
  • Examples of invalid hosts: "helloworld", ".unknown.soft.", "invalid-host-", "invalid-".


  • Examples of valid emails:,,,,

  • Examples of invalid emails:, …,,, mike@helloworld, mike@.unknown.soft., s.johnson@invalid-.



extract emails regex task

asked in PHP category by user paulcabalit

1 Answer

+1 vote

Here is my solution:


$str = readline();
$pattern = '/(^|\s)[a-zA-Z0-9]+[\w\-\.]*@[a-zA-Z-]+(\.[a-zA-Z]+)+/';

preg_match_all($pattern, $str, $matches);

$result = implode("\n", $matches[0]);
echo trim($result);

I am using Regex101

...and a cheatsheet:

regex cheatsheet

answered by user andrew