Задать вопрос
@Muhtorgon

Как с помощью php разбить html текст на теги «a» (ссылки) в массив?

Есть строка состоящая из ссылок типа:

<a href="https://mysite.ru"><img src="https://mysite.ru//image1.jpg" ></a><a href="https://mysite.ru"><img src="https://mysite.ru//image2.jpg" ></a><a href="https://mysite.ru"><img src="https://mysite.ru//image3.jpg" ></a>

Не могу составить регулярное выражение для разбиение ее в массив, такого типа:

array[0] = '<a href="https://mysite.ru"><img src="https://mysite.ru/image1.jpg" ></a>';
array[1] = '<a href="https://mysite.ru"><img src="https://mysite.ru/image2.jpg" ></a>';
array[2] = '<a href="https://mysite.ru"><img src="https://mysite.ru/image3.jpg" ></a>';

Находил такое, но эта регулярка разбивает на каждый элемент:

preg_match_all('#<([a-z]+)[^/>]*(?:/>|>(?:.+\1>))#Uis',$content,$array);
foreach ($array[0] AS $val) echo $val;
  • Вопрос задан
  • 138 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
0xD34F
@0xD34F Куратор тега Регулярные выражения
Не нужны тут регулярные выражения, для разбора html есть специальные инструменты:

$doc = new DOMDocument();
$doc->loadHTML($html);
$a = $doc->getElementsByTagName('a');
$result = array_map([ $doc, 'saveHTML' ], iterator_to_array($a));

Но, конечно, дурацкое дело нехитрое:

$result = preg_split('/(?<=\/a>)(?=<a)/', $html);

// или

preg_match_all('/<a .*?>.*?<\/a>/', $html, $matches);
$result = $matches[0];
Ответ написан
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
preg_match_all('#(<a\s[^>]*>.+?</a>)#is',$content,$array);
foreach ($array[1] AS $val) echo $val;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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