Дано: выбрать все ссылки из строки, текст ссылки заменить на путь, перед ссылкой добавить текст ссылки. Ссылок может быть любое количество.
Решение:
// искомая строка
$str = "Давно выяснено, что при оценке дизайна и композиции читаемый текст мешает сосредоточиться.
<a href=\"http://example1.com/\">Какой-то текст ссылки1</a>Lorem Ipsum используют потому,
что тот обеспечивает более или менее стандартное заполнение шаблона, а также реальное
распределение букв и пробелов в абзацах, <a href=\"http://example2.com/\">Какой-то текст ссылки2</a>
которое не получается при простой дубликации.
<a href=\"http://example3.com/\">Какой-то текст ссылки3</a>
Давно выяснено, что при оценке дизайна и композиции читаемый текст мешает сосредоточиться.
Lorem Ipsum используют потому, что тот обеспечивает более или менее стандартное заполнение шаблона,
а также реальное распределение букв и пробелов в абзацах, которое не получается при простой дубликации.";
// получение всех ссылок
$reg = '/<a[^>]+href="([^ >]+)">(.*?)<\/a>/';
preg_match_all($reg, $str, $arr);
// замена текста на путь
$text_way = str_replace($arr['2'], $arr['1'], $arr['0']);
// добавление текста перед ссылкой
$text_a = array_map(function($f, $s){return "$f $s";}, $arr['2'], $text_way);
// замена ссылок в строке
$str = str_replace($arr['0'], $text_a, $str);
echo $str;
Может быть есть более простое решение данной задачи?