разделить URL из текстовой области в php - PullRequest
0 голосов
/ 09 февраля 2012

У меня мало знаний о регулярных выражениях.Я нашел этот код для обнаружения ссылки, или вы можете сказать, чтобы вставить ссылку, которая написана в текстовой области

$url = 'this is just a link http://stackoverflow.com/ to test';
$text = preg_replace("
  #((http|https|ftp)://(\S*?\.\S*?))(\s|\;|\)|\]|\[|\{|\}|,|\"|'|:|\<|$|\.\s)#ie",
  "'<a href=\"$1\" target=\"_blank\">$3</a>$4'",
  $url
);
echo $text;

вывод: это просто ссылка stackoverflow.com для проверки

Но мне нужно отделить ссылку в переменную от этой текстовой области.Например, переменная $ var = http://stackoverflow.com, чтобы я мог работать со ссылкой.

Ответы [ 3 ]

2 голосов
/ 09 февраля 2012

Вы можете попробовать следующим образом:

$text = 'this is just a link http://stackoverflow.com/ to test';
$regex = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
if(preg_match($regex, $text, $url)) { // $url is now the array of urls
  // here you should check $url content and length
  echo $url[0]; // the first one in this case
}
else {
  // no urls found
}
0 голосов
/ 09 февраля 2012

Вы можете использовать pre_replace_callback , если хотите захватить каждый матч и продолжить манипулирование перед заменой или сохранить его в другом месте.Вы также можете просто сохранить это регулярное выражение и сделать сопоставление позже.Я бы использовал первое, поскольку у вас может быть более одной ссылки в строке, и это будет чище, чем запускать собственный цикл for для совпадений.

0 голосов
/ 09 февраля 2012

Попробуйте в два этапа:

  • захватывает URL-адреса с помощью preg_match или preg_match_all, указывая параметр & $ соответствия
  • заменить URL вашим тегом через str_replace, зацикливаясь на совпадениях
...