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

95

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

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

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

пользователь758263
источник
Если у вас есть выражения для всей строки, просто возьмите ^ и $ out, чтобы они соответствовали частям строки.
entonio

Ответы:

206

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

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

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

Раджив
источник
7
Не забывайте избегать косых черт.
Марк
1
Сейчас 2017 год, и доменные имена в кодировке Unicode встречаются повсюду. \wможет не соответствовать международным символов (зависит от регулярных выражений), диапазон необходим вместо: a-zA-Z0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF.
Михаил Антипин
3
Это хорошо для общих целей, но во многих случаях это не помогает. Это гарантирует, что ваши ссылки имеют префикс протокола. Если вы выбрали игнорирование протоколов, окончания писем принимаются, как и в случае с test@testing.com.
Squazz 07
4
не должно [\w_-]быть [\w-]? потому что \wсовпадения _уже. per mozilla docs
transang
2
Проголосовали, но этот ответ не работает, что задает вопрос www.yahoo.com. """(http|ftp|https)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?""".r.findAllIn("www.google.com").toList. ТАКЖЕ НЕТ ОБЪЯСНЕНИЙ для ответа
прайагупд
46

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

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

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

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

См. Примеры здесь

Стефан Хенце
источник
4
он соответствует www.e Это недействительный URL
Игорь Герасымчук
Эта gопция не действует во всех реализациях регулярных выражений (например, во встроенной реализации Ruby).
Хулиакс
23
text = """The link of this question: /programming/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)

Выход:

[
    '/programming/6038061/regular-expression-to-find-urls-within-a-string', 
    'www.google.com', 
    'facebook.com',
    'http://test.com/method?param=wasd'
]
GooDeeJaY
источник
Kotlin val urlRegex = "(? :( ?: https? | Ftp): \\ / \\ /)? [\\ w / \\ -? =%.] + \\. [\\ w / \\ - ? =%.] + "
Акшай Нандвана
Отсутствуют &параметры в URL-адресе. например, http://test.com/method?param=wasd&param2=wasd2пропускает param2
TrophyGeek
10

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

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

\b
  #Word cannot begin with special characters
  (?<![@.,%&#-])
  #Protocols are optional, but take them with us if they are present
  (?<protocol>\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
  (\.([a-z]{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
(?<![.,?!-])
Squazz
источник
1
Есть ли способ сделать этот javascript дружественным? Поскольку именованные группы захвата не полностью функциональны, проверка значения протокола не выполняется.
einord
6

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

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

и это пример фрагмента для извлечения URL-адресов:

// 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  /programming/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);
Юсефери
источник
5

Все приведенные выше ответы не соответствуют символам Unicode в 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*)
Дюк Филан
источник
2
Символы Unicode были запрещены в соответствии с RFC 1738 в URL-адресах ( faqs.org/rfcs/rfc1738.html ). Они должны быть закодированы в процентах, чтобы соответствовать стандартам - хотя я думаю, что это могло измениться совсем недавно - стоит прочитать w3.org/International/articles/idn-and-iri
mrswadge
@mrswadge Я просто рассказываю о случаях. Мы не уверены, всем ли важен стандарт. Спасибо за вашу информацию.
Дюк Филан
Только этот отлично работал у меня с URL-адресами, такими как " example.com " "www.exmaple.com" " example.com " " example.co.in " " exmaple.com/?q='me '"
Крисс
5

Если вы должны строго подходить к выбору ссылок, я бы выбрал:

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

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

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

Томмазо Беллуццо
источник
2
Не делай этого. regular-expressions.info/catastrophic.html Это убьет ваше приложение ...
Auric
4

я нашел это охватывает большинство примеров ссылок, включая части подкаталогов.

Регулярное выражение:

(?:(?:https?|ftp):\/\/|\b(?:[a-z\d]+\.))(?:(?:[^\s()<>]+|\((?:[^\s()<>]+|(?:\([^\s()<>]+\)))?\))+(?:\((?:[^\s()<>]+|(?:\(?:[^\s()<>]+\)))?\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))?
Тиланка Бовала
источник
3

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

Manojlds
источник
Я нашел регулярное выражение, которое проверяет, является ли вся строка URL-адресом. Я вынул ^ в начале и $ в конце, как вы сказали, но это все равно не сработало. Что я делаю не так? ^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&amp;%\$#\=~])*[^\.\,\)\(\s]$
user758263
Может помочь, если вы покажете, какой язык вы используете. В любом случае, обязательно проверьте http://regexpal.com/; там вы можете проверять различные выражения для своей строки, пока не получите правильное решение.
entonio
@ user758263 - вам действительно нужно такое сложное регулярное выражение для url? Зависит от возможных URL-адресов, которые вы действительно можете найти. Также см. Gskinner.com/RegExr, чтобы попробовать регулярное выражение. У них также есть сотни образцов справа под Communityвкладкой, в том числе для URL-адресов
manojlds
Я пытаюсь найти все возможные URL-адреса и использую C ++. Спасибо за ссылки entonio и manojlds. Сайт gskinner оказался особенно полезным, так как на нем были образцы.
user758263
3

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

/(http|https)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/
Адитья
источник
2
[a-zA-Z]{2,3}действительно плохо подходит для соответствия TLD, см. официальный список: data.iana.org/TLD/tlds-alpha-by-domain.txt
Toto
3

Вот немного более оптимизированное регулярное выражение:

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

Вот тест с данными: https://regex101.com/r/sFzzpY/6

введите описание изображения здесь

Миндаугас Джараминас
источник
2

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

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

Код на regex101.com

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

бафсар
источник
1
Мне понравилось ваше регулярное выражение, потому что это было именно то, что я искал: мне нужно было идентифицировать и удалять URL-адреса из некоторого текста, а не проверять. Работал в рельсах.
Дагмар
@Dagmar, я рад это слышать :)
bafsar
1

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

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

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

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

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

Avjaarsveld
источник
[a-zA-Z]{2,3}действительно плохо подходит для соответствия TLD, см. официальный список: data.iana.org/TLD/tlds-alpha-by-domain.txt . Также ваше регулярное выражение _.........&&&&&&не обязательно соответствует действительному URL-адресу.
Toto
Спасибо за это, JE SUIS CHAELIE, какие-либо предложения по улучшению (особенно за ложное срабатывание)?
avjaarsveld
1

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

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

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

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

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

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

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

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

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

Джастин Э. Сэмюэлс
источник
1

УЛУЧШЕННЫЙ

Обнаруживает такие URL-адреса:

Регулярное выражение:

/^(?:http(s)?:\/\/)?[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$/gm
Драгана Ле Митова
источник
1

Один написал сам:

let regex = /([\w+]+\:\/\/)?([\w\d-]+\.)*[\w-]+[\.\:]\w+([\/\?\=\&\#]?[\w-]+)*\/?/gm

Он работает на ВСЕХ из следующих доменов:

https://www.facebook.com
https://app-1.number123.com
http://facebook.com
ftp://facebook.com
http://localhost:3000
localhost:3000/
unitedkingdomurl.co.uk
this.is.a.url.com/its/still=going?wow
shop.facebook.org
app.number123.com
app1.number123.com
app-1.numbEr123.com
app.dashes-dash.com
www.facebook.com
facebook.com
fb.com/hello_123
fb.com/hel-lo
fb.com/hello/goodbye
fb.com/hello/goodbye?okay
fb.com/hello/goodbye?okay=alright
Hello www.google.com World http://yahoo.com
https://www.google.com.tr/admin/subPage?qs1=sss1&qs2=sss2&qs3=sss3#Services
https://google.com.tr/test/subPage?qs1=sss1&qs2=sss2&qs3=sss3#Services
http://google.com/test/subPage?qs1=sss1&qs2=sss2&qs3=sss3#Services
ftp://google.com/test/subPage?qs1=sss1&qs2=sss2&qs3=sss3#Services
www.google.com.tr/test/subPage?qs1=sss1&qs2=sss2&qs3=sss3#Services
www.google.com/test/subPage?qs1=sss1&qs2=sss2&qs3=sss3#Services
drive.google.com/test/subPage?qs1=sss1&qs2=sss2&qs3=sss3#Services
https://www.example.pl
http://www.example.com
www.example.pl
example.com
http://blog.example.com
http://www.example.com/product
http://www.example.com/products?id=1&page=2
http://www.example.com#up
http://255.255.255.255
255.255.255.255

Вы можете увидеть, как это работает здесь, на regex101 и при необходимости отрегулировать

Wongz
источник
0

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

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

(?<=\.)[^}]*(?=\.)
faisal00813
источник
0

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

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

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

НЕИСПРАВНОСТЬ
источник
0

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

^(https?:\\/\\/([a-zA-z0-9]+)(\\.[a-zA-z0-9]+)(\\.[a-zA-z0-9\\/\\=\\-\\_\\?]+)?)$
Майкон Эйрес да Силва
источник
0
(?:vnc|s3|ssh|scp|sftp|ftp|http|https)\:\/\/[\w\.]+(?:\:?\d{0,5})|(?:mailto|)\:[\w\.]+\@[\w\.]+

Если вам нужно объяснение каждой части, попробуйте в regexr [.] Com, где вы получите отличное объяснение каждого символа.

Это разделено знаком "|" или «ИЛИ», потому что не все используемые URI имеют «//», поэтому именно здесь вы можете создать список схем или условий, которые вы хотели бы сопоставить.

skrap3e
источник
0

Я использую класс С # Uri, и он хорошо работает с IP-адресом, localhost

 public static bool CheckURLIsValid(string url)
    {
        Uri returnURL;

       return (Uri.TryCreate(url, UriKind.Absolute, out returnURL)
           && (returnURL.Scheme == Uri.UriSchemeHttp || returnURL.Scheme == Uri.UriSchemeHttps));


    }
МаянкГаур
источник
0

Мне понравилось решение Стефана Хенце, но оно набрало 34,56. Это слишком общее, и у меня есть неразборчивый HTML. У URL есть 4 якоря;

www,

http: \ (и co),

. затем буквы, а затем /,

или буквы. и один из них: https://ftp.isc.org/www/survey/reports/current/bynum.txt .

Я использовал много информации из этой ветки. Спасибо вам всем.

"(((((http|ftp|https|gopher|telnet|file|localhost):\\/\\/)|(www\\.)|(xn--)){1}([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:\\/~+#-]*[\\w@?^=%&\\/~+#-])?)|(([\\w_-]{2,200}(?:(?:\\.[\\w_-]+)*))((\\.[\\w_-]+\\/([\\w.,@?^=%&:\\/~+#-]*[\\w@?^=%&\\/~+#-])?)|(\\.((org|com|net|edu|gov|mil|int|arpa|biz|info|unknown|one|ninja|network|host|coop|tech)|(jp|br|it|cn|mx|ar|nl|pl|ru|tr|tw|za|be|uk|eg|es|fi|pt|th|nz|cz|hu|gr|dk|il|sg|uy|lt|ua|ie|ir|ve|kz|ec|rs|sk|py|bg|hk|eu|ee|md|is|my|lv|gt|pk|ni|by|ae|kr|su|vn|cy|am|ke))))))(?!(((ttp|tp|ttps):\\/\\/)|(ww\\.)|(n--)))"

Вышеупомянутое решает почти все, кроме строки типа «eurls: www.google.com, facebook.com, http: //test.com/», которая возвращается как одна строка. Tbh idk, почему я добавил gopher и т. Д. Proof R code

if(T){
  wierdurl<-vector()
  wierdurl[1]<-"https://JP納豆.例.jp/dir1/納豆 "
  wierdurl[2]<-"xn--jp-cd2fp15c.xn--fsq.jp "
  wierdurl[3]<-"http://52.221.161.242/2018/11/23/biofourmis-collab"
  wierdurl[4]<-"https://12000.org/ "
  wierdurl[5]<-"  https://vg-1.com/?page_id=1002 "
  wierdurl[6]<-"https://3dnews.ru/822878"
  wierdurl[7]<-"The link of this question: /programming/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. "
  wierdurl[8]<-"Thelinkofthisquestion:/programming/6038061/regular-expression-to-find-urls-within-a-string
  Alsotherearesomeurls:www.google.com,facebook.com,http://test.com/method?param=wasd
  Thecodebelowcatchesallurlsintextandreturnsurlsinlist. "
  wierdurl[9]<-"Thelinkofthisquestion:/programming/6038061/regular-expression-to-find-urls-within-a-stringAlsotherearesomeurlsZwww.google.com,facebook.com,http://test.com/method?param=wasdThecodebelowcatchesallurlsintextandreturnsurlsinlist."
  wierdurl[10]<-"1facebook.com/1res"
  wierdurl[11]<-"1facebook.com/1res/wat.txt"
  wierdurl[12]<-"www.e "
  wierdurl[13]<-"is this the file.txt i need"
  wierdurl[14]<-"xn--jp-cd2fp15c.xn--fsq.jpinspiredby "
  wierdurl[15]<-"[xn--jp-cd2fp15c.xn--fsq.jp/inspiredby "
  wierdurl[16]<-"xnto--jpto-cd2fp15c.xnto--fsq.jpinspiredby "
  wierdurl[17]<-"fsety--fwdvg-gertu56.ffuoiw--ffwsx.3dinspiredby "
  wierdurl[18]<-"://3dnews.ru/822878 "
  wierdurl[19]<-" http://mywebsite.com/msn.co.uk "
  wierdurl[20]<-" 2.0http://www.abe.hip "
  wierdurl[21]<-"www.abe.hip"
  wierdurl[22]<-"hardware/software/data"
  regexstring<-vector()
  regexstring[2]<-"(http|ftp|https)://([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:/~+#-]*[\\w@?^=%&/~+#-])?"
  regexstring[3]<-"/(?:(?:https?|ftp|file):\\/\\/|www\\.|ftp\\.)(?:\\([-A-Z0-9+&@#\\/%=~_|$?!:,.]*\\)|[-A-Z0-9+&@#\\/%=~_|$?!:,.])*(?:\\([-A-Z0-9+&@#\\/%=~_|$?!:,.]*\\)|[A-Z0-9+&@#\\/%=~_|$])/igm"
  regexstring[4]<-"[a-zA-Z0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]?"
  regexstring[5]<-"((http|ftp|https)\\:\\/\\/)?([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:/~+#-]*[\\w@?^=%&/~+#-])?"
  regexstring[6]<-"((http|ftp|https):\\/\\/)?([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:\\/~+#-]*[\\w@?^=%&\\/~+#-])?"
  regexstring[7]<-"(http|ftp|https)(:\\/\\/)([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:/~+#-]*[\\w@?^=%&/~+#-])?"
  regexstring[8]<-"(?:(?:https?|ftp|file):\\/\\/|www\\.|ftp\\.)(?:\\([-A-Z0-9+&@#/%=~_|$?!:,.]*\\)|[-A-Z0-9+&@#/%=~_|$?!:,.])*(?:\\([-A-Z0-9+&@#/%=~_|$?!:,.]*\\)|[A-Z0-9+&@#/%=~_|$])"
  regexstring[10]<-"((http[s]?|ftp):\\/)?\\/?([^:\\/\\s]+)((\\/\\w+)*\\/)([\\w\\-\\.]+[^#?\\s]+)(.*)?(#[\\w\\-]+)?"
  regexstring[12]<-"http[s:/]+[[:alnum:]./]+"
  regexstring[9]<-"http[s:/]+[[:alnum:]./]+" #in DLpages 230
  regexstring[1]<-"[[:alnum:]-]+?[.][:alnum:]+?(?=[/ :])" #in link_graphs 50
  regexstring[13]<-"^(?!mailto:)(?:(?:http|https|ftp)://)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$"
  regexstring[14]<-"(((((http|ftp|https):\\/\\/)|(www\\.)|(xn--)){1}([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:\\/~+#-]*[\\w@?^=%&\\/~+#-])?)|(([\\w_-]+(?:(?:\\.[\\w_-]+)*))((\\.((org|com|net|edu|gov|mil|int)|(([:alpha:]{2})(?=[, ]))))|([\\/]([\\w.,@?^=%&:\\/~+#-]*[\\w@?^=%&\\/~+#-])?))))(?!(((ttp|tp|ttps):\\/\\/)|(ww\\.)|(n--)))"
  regexstring[15]<-"(((((http|ftp|https|gopher|telnet|file|localhost):\\/\\/)|(www\\.)|(xn--)){1}([\\w_-]+(?:(?:\\.[\\w_-]+)+))([\\w.,@?^=%&:\\/~+#-]*[\\w@?^=%&\\/~+#-])?)|(([\\w_-]{2,200}(?:(?:\\.[\\w_-]+)*))((\\.[\\w_-]+\\/([\\w.,@?^=%&:\\/~+#-]*[\\w@?^=%&\\/~+#-])?)|(\\.((org|com|net|edu|gov|mil|int|arpa|biz|info|unknown|one|ninja|network|host|coop|tech)|(jp|br|it|cn|mx|ar|nl|pl|ru|tr|tw|za|be|uk|eg|es|fi|pt|th|nz|cz|hu|gr|dk|il|sg|uy|lt|ua|ie|ir|ve|kz|ec|rs|sk|py|bg|hk|eu|ee|md|is|my|lv|gt|pk|ni|by|ae|kr|su|vn|cy|am|ke))))))(?!(((ttp|tp|ttps):\\/\\/)|(ww\\.)|(n--)))"
    }

for(i in wierdurl){#c(7,22)
  for(c in regexstring[c(15)]) {
    print(paste(i,which(regexstring==c)))
    print(str_extract_all(i,c))
  }
}
run8
источник
-1

Это лучший вариант.

NSString *urlRegex="(http|ftp|https|www|gopher|telnet|file)(://|.)([\\w_-]+(?:(?:\\.[\\w_-]+)‌​+))([\\w.,@?^=%&:/~+#-]*[\\w@?^=%&/~+#-])?";
Дхинакар
источник
-1

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

%(http|ftp|https|www)(://|\.)[A-Za-z0-9-_\.]*(\.)[a-z]*%
Md. Мирадж Хан
источник
-1

Это просто.

Используйте этот шаблон: \b((ftp|https?)://)?([\w-\.]+\.(com|net|org|gov|mil|int|edu|info|me)|(\d+\.\d+\.\d+\.\d+))(:\d+)?(\/[\w-\/]*(\?\w*(=\w+)*[&\w-=]*)*(#[\w-]+)*)?

Соответствует любой ссылке, содержащей:

Разрешенные протоколы: http, https и ftp

Разрешенные домены: * .com, * .net, * .org, * .gov, * .mil, * .int, * .edu, * .info и * .me ИЛИ IP

Разрешенные порты: true

Допустимые параметры: true

Разрешенные хэши: true

Махмуд Худаири
источник