Expressão regular para encontrar URLs em uma string

93

Alguém conhece uma expressão regular que eu possa usar para encontrar URLs dentro de uma string? Eu encontrei muitas expressões regulares no Google para determinar se uma string inteira é um URL, mas preciso ser capaz de pesquisar URLs em uma string inteira. Por exemplo, eu gostaria de poder encontrar www.google.come http://yahoo.comna seguinte string:

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

Não estou procurando URLs específicos na string. Estou procurando TODOS os URLs na string, por isso preciso de uma expressão regular.

user758263
fonte
Se você tiver expressões para toda a string, apenas retire ^ e $ para fazer com que elas correspondam a partes da string.
entonio

Respostas:

197

Este é o que eu uso

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

Funciona para mim, deve funcionar para você também.

Rajeev
fonte
6
Não se esqueça de escapar das barras.
Marcar
1
Estamos em 2017 e os nomes de domínio Unicode estão por toda parte. \wpode não coincidir com símbolos internacionais (depende do motor regex), é necessário o intervalo em vez: a-zA-Z0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF.
Michael Antipin
3
Isso é bom para fins gerais, mas há muitos casos em que não funciona. Isso faz com que seus links sejam prefixados com um protocolo. Se optar por ignorar os protocolos, terminações de e-mails são aceitas, como é o caso com [email protected].
Squazz
4
não deveria [\w_-]ser [\w-]? porque já \wcombina _. por documentos de
Mozilla
1
Votos positivos, mas essa resposta não funciona com o que a pergunta está pedindo www.yahoo.com. """(http|ftp|https)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?""".r.findAllIn("www.google.com").toList. TAMBÉM FALTA DE EXPLICAÇÃO para a resposta
prayagupd
43

Acho que nenhum regex é perfeito para esse uso. Eu encontrei um bastante sólido aqui

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

Algumas diferenças / vantagens em relação às outras aqui postadas:

  • Ele faz não coincidir com os endereços de e-mail
  • Corresponde a localhost: 12345
  • Ele não detectará algo como moo.comsem httpouwww

Veja aqui os exemplos

Stefan Henze
fonte
4
corresponde a www.e Este não é um url válido
Ihor Herasymchuk
A gopção não é válida em todas as implementações de expressão regular (por exemplo, implementação embutida de Ruby).
Huliax
22
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)

Resultado:

[
    '/programming/6038061/regular-expression-to-find-urls-within-a-string', 
    'www.google.com', 
    'facebook.com',
    'http://test.com/method?param=wasd'
]
GooDeeJaY
fonte
Kotlin val urlRegex = "(? :( ?: https? | Ftp): \\ / \\ /)? [\\ w / \\ -? =%.] + \\. [\\ w / \\ - ? =%.] + "
Akshay Nandwana
&Parâmetros em falta no url. por exemplo, http://test.com/method?param=wasd&param2=wasd2misses param2
TrophyGeek
9

Nenhuma das soluções fornecidas aqui resolveu os problemas / casos de uso que eu tive.

O que forneci aqui é o melhor que encontrei / fiz até agora. Vou atualizá-lo quando encontrar novos casos extremos que ele não trata.

\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
fonte
1
Existe alguma maneira de tornar este javascript amigável? Como os grupos de captura nomeados não são totalmente funcionais lá, a verificação do valor do protocolo não valida.
einord
6

Eu acho que este padrão regex lida exatamente com o que você deseja

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

e este é um exemplo de snippet para extrair 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  /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);
Yuseferi
fonte
4

Todas as respostas acima não correspondem a caracteres Unicode no URL, por exemplo: http://google.com?query=đức+filan+đã+search

Para a solução, este deve funcionar:

(ftp:\/\/|www\.|https?:\/\/){1}[a-zA-Z0-9u00a1-\uffff0-]{2,}\.[a-zA-Z0-9u00a1-\uffff0-]{2,}(\S*)
Duc Filan
fonte
2
Os caracteres Unicode foram proibidos de acordo com o RFC 1738 em URLs ( faqs.org/rfcs/rfc1738.html ). Eles teriam que ser codificados por cento para serem compatíveis com os padrões - embora eu ache que pode ter mudado mais recentemente - vale a pena ler w3.org/International/articles/idn-and-iri
mrswadge
@mrswadge Acabei de cobrir os casos. Não temos certeza se todas as pessoas se preocupam com o padrão. Obrigado por sua informação.
Duc Filan
Apenas este funcionou perfeitamente para mim com urls como " example.com " "www.exmaple.com" " example.com " " example.co.in " " exmaple.com/?q='me '"
Krissh
4

Eu descobri que isso cobre a maioria dos links de amostra, incluindo partes de subdiretórios.

Regex é:

(?:(?:https?|ftp):\/\/|\b(?:[a-z\d]+\.))(?:(?:[^\s()<>]+|\((?:[^\s()<>]+|(?:\([^\s()<>]+\)))?\))+(?:\((?:[^\s()<>]+|(?:\(?:[^\s()<>]+\)))?\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))?
Thilanka Bowala
fonte
3

Se você tiver que ser rigoroso na seleção de links, eu escolheria:

(?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`!()\[\]{};:'".,<>?«»“”‘’]))

Para mais informações, leia isto:

Um padrão de regex preciso e liberal aprimorado para URLs correspondentes

Tommaso Belluzzo
fonte
1
Não faça isso. regular-expressions.info/catastrophic.html Isso matará seu aplicativo ...
Auric
3

Aqui está um regexp um pouco mais otimizado:

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

Aqui está o teste com dados: https://regex101.com/r/sFzzpY/6

insira a descrição da imagem aqui

Mindaugas Jaraminas
fonte
2

Se você tiver o padrão de url, poderá pesquisá-lo em sua string. Apenas certifique-se de que o padrão não tem ^e $marcando o início e o final da string url. Portanto, se P for o padrão para URL, procure correspondências para P.

manojlds
fonte
Esta é a regex que descobri que verifica se uma string inteira é um URL. Tirei o ^ no início e o $ no final como você disse e ainda não funcionou. O que estou fazendo de errado? ^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&amp;%\$#\=~])*[^\.\,\)\(\s]$
user758263
Pode ajudar se você mostrar o idioma que está usando. De qualquer forma, certifique-se de verificar http://regexpal.com/; lá você pode testar diferentes expressões em sua string até acertar.
entonio
@ user758263 - você realmente precisa de um regex tão complexo para o url? Depende de quais URLs você possa realmente encontrar. Consulte também gskinner.com/RegExr para experimentar o regex. Eles também têm centenas de exemplos à direita na Communityguia, incluindo alguns para urls
manojlds
Estou tentando procurar todos os URLs possíveis e estou usando C ++. Obrigado pelos links entonio e manojlds. O site gskinner foi especialmente útil, pois tinha amostras.
user758263
2

Usei a expressão regular abaixo para encontrar o url em uma string:

/(http|https)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/
aditya
fonte
2
[a-zA-Z]{2,3}é muito ruim para correspondência de TLD, consulte a lista oficial: data.iana.org/TLD/tlds-alpha-by-domain.txt
Toto
1

Curto e simples. Ainda não testei o código javascript, mas parece que vai funcionar:

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

Código em regex101.com

Visualização do código

bafsar
fonte
1
Gostei da sua regex porque era exatamente o que eu estava procurando: eu precisava identificar e retirar URLs de algum texto, não validar. Trabalhou em carris.
Dagmar de
@Dagmar Fico feliz em saber disso :)
bafsar
1

Um método provavelmente muito simplista, mas pode ser:

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

Eu testei em Python e, desde que a análise de string contenha um espaço antes e depois e nenhum na url (que eu nunca vi antes), deve funcionar bem.

Aqui está um ide online demonstrando isso

No entanto, aqui estão alguns benefícios de usá-lo:

  • Ele reconhece file:e localhosttambém os endereços IP
  • Nunca vai combinar sem eles
  • Ele não se importa com caracteres incomuns, como #ou -(veja o URL desta postagem)
Simon
fonte
1

Usar a regex fornecida por @JustinLevene não tinha as sequências de escape adequadas nas barras invertidas. Atualizado para estar correto agora e adicionado na condição de corresponder ao protocolo FTP também: Irá corresponder a todos os urls com ou sem protocolos e sem "www."

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

Exemplo: https://regex101.com/r/uQ9aL4/65

Justin E. Samuels
fonte
1

Escrevi um para mim:

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

Funciona em TODOS os seguintes domínios:

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

Você pode ver como funciona aqui no regex101 e ajustar conforme necessário

wongz
fonte
0

Esta é uma pequena melhoria / ajuste (dependendo do que você precisa) da resposta de Rajeev:

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

Veja aqui um exemplo do que corresponde e do que não corresponde.

Eu me livrei da verificação de "http" etc porque eu queria pegar urls sem isso. Eu adicionei um pouco ao regex para capturar alguns urls ofuscados (ou seja, onde o usuário usa [ponto] em vez de um "."). Finalmente, substituí "\ w" por "AZ" para e "{2,3}" para reduzir falsos positivos como v2.0 e "moo.0dd".

Quaisquer melhorias neste bem-vindo.

avjaarsveld
fonte
[a-zA-Z]{2,3}é muito ruim para correspondência de TLD, consulte a lista oficial: data.iana.org/TLD/tlds-alpha-by-domain.txt . Além disso, sua regex _.........&&&&&&não corresponde a um url válido.
Toto
Obrigado por isso JE SUIS CHAELIE, alguma sugestão de melhoria (especialmente para o falso positivo)?
avjaarsveld
0

Eu usei isso

^(https?:\\/\\/([a-zA-z0-9]+)(\\.[a-zA-z0-9]+)(\\.[a-zA-z0-9\\/\\=\\-\\_\\?]+)?)$
Maikon Ayres Da Silva
fonte
0
(?:vnc|s3|ssh|scp|sftp|ftp|http|https)\:\/\/[\w\.]+(?:\:?\d{0,5})|(?:mailto|)\:[\w\.]+\@[\w\.]+

Se você quiser uma explicação de cada parte, tente regexr [.] Com, onde você obterá uma ótima explicação de cada caractere.

Isso é dividido por um "|" ou "OU" porque nem todos os URI utilizáveis ​​têm "//", então é aqui que você pode criar uma lista de esquemas ou condições que você estaria interessado em combinar.

skrap3e
fonte
0

Eu utilizei a classe c # Uri e funciona bem com endereço 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));


    }
MayankGaur
fonte
0

Eu gostei da solução de Stefan Henze, mas pegaria 34,56. É muito geral e tenho html não analisado. Existem 4 âncoras para um url;

www,

http: \ (e co),

. seguido por letras e então /,

ou letras. e um destes: https://ftp.isc.org/www/survey/reports/current/bynum.txt .

Usei muitas informações deste tópico. Obrigado a todos.

"(((((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--)))"

Acima resolve quase tudo, exceto uma string como "eurls: www.google.com, facebook.com, http: //test.com/", que retorna como uma única string. Tbh idk porque eu adicionei gopher etc. Código de prova R

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))
  }
}
ran8
fonte
-1

Eu uso a lógica de encontrar texto entre dois pontos ou pontos

o regex abaixo funciona bem com python

(?<=\.)[^}]*(?=\.)
faisal00813
fonte
-1

Este é o mais simples. que funcionam bem para mim.

%(http|ftp|https|www)(://|\.)[A-Za-z0-9-_\.]*(\.)[a-z]*%
Md. Miraj Khan
fonte
-1

É muito simples.

Use este padrão: \b((ftp|https?)://)?([\w-\.]+\.(com|net|org|gov|mil|int|edu|info|me)|(\d+\.\d+\.\d+\.\d+))(:\d+)?(\/[\w-\/]*(\?\w*(=\w+)*[&\w-=]*)*(#[\w-]+)*)?

Corresponde a qualquer link que contenha:

Protocolos permitidos: http, https e ftp

Domínios permitidos: * .com, * .net, * .org, * .gov, * .mil, * .int, * .edu, * .info e * .me OU IP

Portas permitidas: verdadeiro

Parâmetros permitidos: verdadeiro

Hashes permitidos: verdadeiro

Mahmoud Khudairi
fonte
-2

Esta é a melhor.

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