Регулярное выражение для ссылок

bullet2018

Новичок
Здравствуйте. Помогите пожалуйста составить регулярку для записи в массив всех ссылок из строки такого вида (количество ссылок в строке бывает от 0 до 10):
Код:
различный html текст с различными символами [url=http://img.site.kz/upload_image/000.JPG][img=left]http://img.site.kz/upload_image/thumb/000.JPG[/img][/url] опять html код
[url=http://img.site.kz/upload_image/111.JPG][img=left]http://img.site.kz/upload_image/thumb/111.JPG[/img][/url]
Нужно получить в итоге массив такого рода (Чтобы в нем были ссылки из кода с тега url :


Код:
 Array ( [0] => http://img.site.kz/upload_image/000.JPG [1] => http://img.site.kz/upload_image/111.JPG )
Либо вывести текст, что нет ссылок. Заранее спасибо.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Как пробовал делать?
 

bullet2018

Новичок
Код:
if (preg_match('|\[url=.*?(.*)\]\[img|sei', $text, $arr)) $text = $arr[1];
но тут получается одна строка которая содержит данные между "[url = " и "][img"
 

AnrDaemon

Продвинутый новичок
Одной регуляркой вложенные теги ты не разберёшь.
 

fixxxer

К.О.
Партнер клуба
Ну почему, через PCRE recursion можно. Но это брейнфак :)
 

bullet2018

Новичок
Зачем вложенные?
Просто нужно засунуть в элемент массива данным между символами:
Код:
[url= "данные" ][img
 

bullet2018

Новичок
В общем решилась моя задача вот так:

Код:
  $str = "различный html текст с различными символами  [url=http://img.site.kz/upload_image/000.JPG][img=left]http://img.site.kz/upload_image/thumb/000.JPG[/img][/url] опять html код [url=http://img.site.kz/upload_image/111.JPG][img=left]http://img.site.kz/upload_image/thumb/111.JPG[/img][/url] ";
 
  $pattern = '|(?<=\[url=)[^\]]+|';
  if (preg_match_all($pattern, $str, $matches , PREG_PATTERN_ORDER ) ) {
  $res= $matches[0];
  print_r($res);
  } else {
  echo ("нет ссылок");
  }

И удалил из строки лишние ссылки

Код:
  $str=preg_replace('#\[url=.*\[\/url\]#sUi', '', $str);
 
Сверху