Необходимо оставить только емейлы вида [mailto:qqq.www@eee.rrt qqq.www@eee.rrt], как это сделать?
$str = "
qqq.www@eee.rrtt
[mailto:qqq.www@eee.rrt qqq.www@eee.rrt]
";
$target_str = " (?!\[mailto\:)([a-z0-9._%+-]+@(?:[A-Z0-9-]+\.)+[A-Z]{2,}(?!\]))(?!\])";
$replacement_str = " [mailto:$1 $1]";
$num_matches = 0;
$str2 = preg_replace( '/' . $target_str . '/ui', $replacement_str, $str , -1, $num_matches );
echo $str;
echo $str2;
Логика такая. Если в тексте попадается емейл, то заменить его на паттерн
если попался паттерн, то оставить как есть.
Проблема в том что регулярка хватает второй емейл и заменяет его по паттерну.
песочница