@kalinichenkoroman

Как написать регулярное выражение с заменой?

Необходимо оставить только емейлы вида [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;

Логика такая. Если в тексте попадается емейл, то заменить его на паттерн
если попался паттерн, то оставить как есть.
Проблема в том что регулярка хватает второй емейл и заменяет его по паттерну.
песочница
  • Вопрос задан
  • 68 просмотров
Решения вопроса 1
@dodo512
$pattern = '/[\w.%+-]+@(?:[a-z\d-]+\.)+[a-z]{2,}|\[mailto:[^\]]+(*SKIP)(*F)/i';

$str = preg_replace($pattern, '[mailto:$0]', $str);

sandbox.onlinephpfunctions.com/code/cd3b7b636cde9b...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы