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

Кто-нибудь знает о регулярном выражении, которое я мог бы использовать для поиска URL-адресов внутри строки? Я нашел много регулярных выражений в Google для определения того, является ли целая строка URL-адресом, но мне нужно иметь возможность искать целую строку для URL-адресов. Например, я хотел бы найти www.google.com и http://yahoo.com в следующей строке:

 Hello www.google.com World http://yahoo.com 

Я не ищу конкретные URL-адреса в строке. Я ищу ВСЕ URL-адреса в строке, поэтому мне нужно регулярное выражение.

Это тот, который я использую

 (http|ftp|https)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\[email protected]?^=%&/~+#-])? 

Работает для меня, должен работать и на вас.

Guess no regex отлично подходит для этого использования. Я нашел довольно солидный

 /(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|[-A-Z0-9+&@#\/%=~_|$?!:,.])*(?:\([-A-Z0-9+&@#\/%=~_|$?!:,.]*\)|[A-Z0-9+&@#\/%=~_|$])/igm 

Некоторые отличия / преимущества по сравнению с другими:

  • Он не соответствует адресам электронной почты
  • Он соответствует localhost: 12345
  • Он не обнаружит что-то вроде moo.com без http или www

См. Здесь примеры

 text = """The link of this question: https://stackoverflow.com/questions/6038061/regular-expression-to-find-urls-within-a-string Also there are some urls: www.google.com, facebook.com, http://test.com/method?param=wasd The code below catches all urls in text and returns urls in list.""" urls = re.findall('(?:(?:https?|ftp):\/\/)?[\w/\-?=%.]+\.[\w/\-?=%.]+', text) print(urls) 

Вывод:

 [ 'https://stackoverflow.com/questions/6038061/regular-expression-to-find-urls-within-a-string', 'www.google.com', 'facebook.com', 'http://test.com/method?param=wasd' ] 

Ни одно из решений, представленных здесь, не разрешило проблемы / варианты использования, которые у меня были.

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

 \b #Word cannot begin with special characters (?\w{2,10}:\/\/)? #Domains have to be of a length of 1 chars or greater ((?:\w|\&\#\d{1,5};)[.-]?)+ #The domain ending has to be between 2 to 15 characters (\.([az]{2,15}) #If no domain ending we want a port, only if a protocol is specified |(?(protocol)(?:\:\d{1,6})|(?!))) \b #Word cannot end with @ (made to catch emails) (?![@]) #We accept any number of slugs, given we have a char after the slash (\/)? #If we have endings like ?=fds include the ending (?:([\w\d\?\-=#:%@&.;])+(?:\/(?:([\w\d\?\-=#:%@&;.])+))*)? #The last char cannot be one of these symbols .,?!,- exclude these (? 

Если у вас есть шаблон url, вы сможете найти его в своей строке. Просто убедитесь, что у шаблона нет ^ и $ marking начало и конец строки url. Поэтому, если P является шаблоном для URL-адреса, найдите совпадения для P.

Все приведенные выше ответы не соответствуют символам Юникода в URL-адресе, например: http://google.com?query=đức+filan+đã+search

Для решения это должно работать:

 (ftp:\/\/|www\.|https?:\/\/){1}[a-zA-Z0-9u00a1-\uffff0-]{2,}\.[a-zA-Z0-9u00a1-\uffff0-]{2,}(\S*) 

Я думаю, что этот шаблон регулярного выражения обрабатывает именно то, что вы хотите

 /(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/ 

и это пример fragmentа для извлечения Urls:

 // The Regular Expression filter $reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/"; // The Text you want to filter for urls $text = "The text you want https://stackoverflow.com/questions/6038061/regular-expression-to-find-urls-within-a-string to filter goes here."; // Check if there is a url in the text preg_match_all($reg_exUrl, $text, $url,$matches); var_dump($matches); 

Это небольшое улучшение / корректировка (в зависимости от того, что вам нужно). Ответ Раджива:

 ([\w\-_]+(?:(?:\.|\s*\[dot\]\s*[AZ\-_]+)+))([AZ\-\.,@?^=%&:/~\+#]*[AZ\-\@?^=%&/~\+#]){2,6}? 

См. Здесь пример того, что он делает и не соответствует.

Я избавился от проверки на «http» и т. Д., Поскольку я хотел уловить URL без этого. Я немного добавил к регулярному выражению, чтобы поймать некоторые запутанные URL-адреса (то есть, когда пользователь использует [точка] вместо «.»). Наконец, я заменил «\ w» на «AZ» и «{2,3}», чтобы уменьшить ложные срабатывания, такие как v2.0 и «moo.0dd».

Любые улучшения в этом приветствии.

Короткие и простые. Я еще не тестировал код javascript, но, похоже, он будет работать:

 ((http|ftp|https):\/\/)?(([\w.-]*)\.([\w]*)) 

Код на regex101.com

Предварительный просмотр кода

Если вы должны быть строгими при выборе ссылок, я бы пошел:

 (?i)\b((?:[az][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][az]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”''])) 

Для получения дополнительной информации прочтите следующее:

Улучшенный либеральный, точный шаблон регулярных выражений для сопоставления URL-адресов

Я использовал это

 ^(https?:\\/\\/([a-zA-z0-9]+)(\\.[a-zA-z0-9]+)(\\.[a-zA-z0-9\\/\\=\\-\\_\\?]+)?)$ 

Вероятно, слишком упрощенный, но рабочий метод может быть:

 [localhost|http|https|ftp|file]+://[\w\S(\.|:|/)]+ 

Я тестировал его на Python и до тех пор, пока синтаксический анализ строки содержит пробел до и после, и ни один из URL-адресов (который я никогда не видел раньше), это должно быть хорошо.

Вот онлайн-демон, демонстрирующий это

Однако вот некоторые преимущества его использования:

  • Он распознает file: и localhost а также ip-адреса
  • Он никогда не будет соответствовать без них
  • Это не против необычных символов, таких как # или - (см. Url этого сообщения)

Я использовал ниже регулярное выражение, чтобы найти url в строке:

 /(http|https)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/ 

Это самый простой. которые работают для меня хорошо.

 %(http|ftp|https|www)(://|\.)[A-Za-z0-9-_\.]*(\.)[az]*% 

Я использую логику нахождения текста между двумя точками или периодами

регулярное выражение ниже отлично работает с python

 (?<=\.)[^}]*(?=\.) 

Это лучший.

 NSString *urlRegex="(http|ftp|https|www|gopher|telnet|file)(://|.)([\\w_-]+(?:(?:\\.[\\w_-]+)‌​+))([\\w.,@?^=%&:/~+#-]*[\\[email protected]?^=%&/~+#-])?"; 

Соответствие URL-адреса в тексте не должно быть настолько сложным

(?:(?:(?:ftp|http)[s]*:\/\/|www\.)[^\.]+\.[^ \n]+)

https://regex101.com/r/wewpP1/2

String regex = "[a-zA-Z0-9]+[.]([.a-zA-Z0-9])+";

Это хорошо работает и в вашем случае.

  • Как проверить правильность URL-адреса в Android
  • Получить содержимое файла из URL?
  • URL: Имя пользователя с @
  • Перенаправление на внешний URI из ASP.NET MVC-controllerа
  • Доступ к URL-адресу и чтение данных с помощью R
  • Каково значение # в URL-адресе и как я могу это использовать?
  • Android-сервис - URL-адрес Ping
  • Я регулярно вижу gstatic.com в строке состояния, что это за домен?
  • Как получить URL-адрес с веб-сайта с помощью Java?
  • Есть ли способ экспортировать URL-адреса открытых вкладок окна Firefox?
  • ANDROID: Как загрузить видеофайл на SD-карту?
  • Interesting Posts

    jQuery добавить class. active в меню

    Самый быстрый тип фиксированной длины 6 int array

    Функциональный указатель на функцию-член

    Эффективно находите двоичные строки с низким расстоянием Хэмминга в большом наборе

    java.rmi.NoSuchObjectException: нет такого объекта в таблице

    Наложение данных на фоновое изображение

    Установка изображения UIButton приводит к синей кнопке в iOS 7

    Изменение размера изображения в Markdown

    Как добавить значок перед каждым элементом в диалоговом окне предупреждения?

    Получение исходного каталога сценария Bash изнутри

    Как найти n-ое появление символа в строке?

    VirtualBox Fatal: загрузочный носитель не найден! Система остановлена

    JavaScript – почему Array.prototype.fill фактически заполняет «указатель» объекта при заполнении чего-либо типа «новый объект ()»

    Скрыть пользователя от экрана входа в систему без его деактивации

    Получают ли данные memtest86 дефектный модуль памяти?

    Давайте будем гением компьютера.