Регулярное выражение для поиска URL в строке - PullRequest
67 голосов
/ 18 мая 2011

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

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

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

Ответы [ 21 ]

0 голосов
/ 16 октября 2018

При использовании регулярного выражения, предоставленного @JustinLevene, не было правильных escape-последовательностей на обратных косых чертах.Обновлен и теперь корректен и добавлен в соответствии с протоколом FTP: будет соответствовать всем URL-адресам с протоколами или без них и без "www."

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

Пример: https://regex101.com/r/uQ9aL4/65

0 голосов
/ 20 февраля 2018

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

%(http|ftp|https|www)(://|\.)[A-Za-z0-9-_\.]*(\.)[a-z]*%
0 голосов
/ 26 августа 2014

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

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

(?<=\.)[^}]*(?=\.)
0 голосов
/ 06 февраля 2018

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

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

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

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

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

  • Он распознает file: и localhost, а также IP-адреса
  • Он будет никогда не совпадать без них
  • Он не против необычных символов, таких как # или - (см. URL этого поста)
0 голосов
/ 10 января 2018

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

^(https?:\\/\\/([a-zA-z0-9]+)(\\.[a-zA-z0-9]+)(\\.[a-zA-z0-9\\/\\=\\-\\_\\?]+)?)$
0 голосов
/ 19 января 2015

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

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

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

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

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

0 голосов
/ 19 января 2015

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

/(http|https)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/
0 голосов
/ 03 ноября 2016

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

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

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

0 голосов
/ 28 августа 2015

Это лучший.

NSString *urlRegex="(http|ftp|https|www|gopher|telnet|file)(://|.)([\\w_-]+(?:(?:\\.[\\w_-]+)‌​+))([\\w.,@?^=%&:/~+#-]*[\\w@?^=%&/~+#-])?";
0 голосов
/ 27 апреля 2019

На случай, если кому-то понадобится регулярное выражение с обнаружением URL-адресов, таких как:

  1. https://www.youtube.com/watch?v=38XmKNcgjSU
  2. https://www.youtube.com/
  3. www.youtube.com
  4. youtube.com ...

Я придумал это регулярное выражение:

((http(s)?://)?([\w-]+\.)+[\w-]+[.com]+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...