如何使用正则表达式识别特定域的邮件地址?

I want to wrap some html elements for gmail address in a given string. How can i do it with php regex.

Input

$string = 'Sample text name@gmail.com another text name2@gmail.com,name2@yahoo.com';

Output I want

$string = "Sample text <div class='gmail'>name@gmail.com</div> another text <div class='gmail'>name2@gmail.com</div>,name2@yahoo.com";

Try something like (wraps all email adresses):

$string = 'Sample text name@gmail.com another text name2@gmail.com,name2@yahoo.com';
echo preg_replace("/([\._a-zA-Z0-9-]+@[\._a-zA-Z0-9-])+/i", "<div class='gmail'>$1</div>", $string);

Gmail only:

$string = 'Sample text name@gmail.com another text name2@gmail.com,name2@yahoo.com';
echo preg_replace("/([\._a-zA-Z0-9-]+@gmail.com)+/i", "<div class='gmail'>$1</div>", $string);

You can take practically any email search regex and just replace the domain part with a fixed string. Then searching and replacing isn't much effort:

 = preg_replace('/\b\w[\w+.%!-]+@gmail.com\b/', "<div class=gmail>$0</div>", $src);
                      # ^^^ allowed special chars still insufficient
preg_replace('(\w+?@\w+?\.\w+)', '<div class="gmail">$0</div>', 'Sample text name@gmail.com another text name2@gmail.com,name2@yahoo.com');