Expresión regular para buscar URL dentro de una cadena

95

¿Alguien sabe de una expresión regular que pueda usar para encontrar URL dentro de una cadena? Encontré muchas expresiones regulares en Google para determinar si una cadena completa es una URL, pero necesito poder buscar URL en una cadena completa. Por ejemplo, me gustaría poder encontrar www.google.comy http://yahoo.comen la siguiente cadena:

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

No estoy buscando URL específicas en la cadena. Estoy buscando TODAS las URL en la cadena, por eso necesito una expresión regular.

usuario758263
fuente
Si tiene expresiones para toda la cadena, simplemente elimine ^ y $ para que coincidan con partes de la cadena.
entonio

Respuestas:

206

Este es el que yo uso

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

Funciona para mí, debería funcionar para ti también.

Rajeev
fuente
7
No olvides escapar de las barras diagonales.
Mark
1
Es 2017 y los nombres de dominio Unicode están por todas partes. \wpueden no coincidir con los símbolos internacionales (depende del motor de expresiones regulares), es necesaria la gama en su lugar: a-zA-Z0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF.
Michael Antipin
3
Esto está bien para fines generales, pero hay muchos casos en los que no se detecta. Esto obliga a que sus enlaces tengan un prefijo con un protocolo. Si elige ignorar los protocolos, se aceptan las terminaciones de los correos electrónicos, como es el caso de [email protected].
Squazz
4
no debería [\w_-]ser [\w-]? porque ya \wcoincide _. por documentos de mozilla
transang
2
Voto a favor, pero esta respuesta no funciona con lo que pide la pregunta www.yahoo.com. """(http|ftp|https)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?""".r.findAllIn("www.google.com").toList. TAMBIÉN FALTA EXPLICACIÓN para la respuesta
prayagupd
45

Supongo que ninguna expresión regular es perfecta para este uso. Encontré uno bastante sólido aquí

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

Algunas diferencias / ventajas en comparación con las otras publicadas aquí:

  • No , no coincide con direcciones de correo electrónico
  • Coincide con localhost: 12345
  • No detectará algo como moo.comsin httpowww

Vea aquí para ver ejemplos

Stefan Henze
fuente
4
coincide con www.e Esta no es una URL válida
Ihor Herasymchuk
La gopción no es válida en todas las implementaciones de expresiones regulares (por ejemplo, la implementación incorporada de Ruby).
Huliax
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)

Salida:

[
    '/programming/6038061/regular-expression-to-find-urls-within-a-string', 
    'www.google.com', 
    'facebook.com',
    'http://test.com/method?param=wasd'
]
GooDeeJaY
fuente
Kotlin val urlRegex = "(? :( ?: https? | Ftp): \\ / \\ /)? [\\ w / \\ -? =%.] + \\. [\\ w / \\ - ? =%.] + "
Akshay Nandwana
Falta &parámetros en la URL. por ejemplo, http://test.com/method?param=wasd&param2=wasd2pierde param2
TrophyGeek
10

Ninguna de las soluciones proporcionadas aquí resolvió los problemas / casos de uso que tenía.

Lo que he proporcionado aquí es lo mejor que he encontrado / hecho hasta ahora. Lo actualizaré cuando encuentre nuevos casos extremos que no maneje.

\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
fuente
1
¿Hay alguna forma de hacer esto compatible con JavaScript? Como los grupos de captura con nombre no son completamente funcionales allí, la verificación del valor del protocolo no se valida.
einord
6

Creo que este patrón de expresiones regulares maneja precisamente lo que quieres

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

y este es un ejemplo de fragmento para extraer 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);
Yuseferi
fuente
5

Todas las respuestas anteriores no coinciden con los caracteres Unicode en la URL, por ejemplo: http://google.com?query=đức+filan+đã+search

Para la solución, este debería funcionar:

(ftp:\/\/|www\.|https?:\/\/){1}[a-zA-Z0-9u00a1-\uffff0-]{2,}\.[a-zA-Z0-9u00a1-\uffff0-]{2,}(\S*)
Duc Filan
fuente
2
Los caracteres Unicode estaban prohibidos según el RFC 1738 en las URL ( faqs.org/rfcs/rfc1738.html ). Tendrían que estar codificados porcentualmente para cumplir con los estándares, aunque creo que puede haber cambiado más recientemente, vale la pena leerlos en w3.org/International/articles/idn-and-iri
mrswadge
@mrswadge Solo cubro los casos. No estamos seguros de si a todas las personas les importa el estándar. Gracias por tu información.
Duc Filan
Solo este funcionó perfectamente para mí, ya que tenía URL como " example.com " "www.exmaple.com" " example.com " " example.co.in " " exmaple.com/?q='me '"
Krissh
5

Si tiene que ser estricto en la selección de enlaces, optaría por:

(?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 más información, lea esto:

Un patrón de expresiones regulares preciso y liberal mejorado para URL coincidentes

Tommaso Belluzzo
fuente
2
No hagas eso. regular-expressions.info/catastrophic.html Matará tu aplicación ...
Auric
4

Encontré esto que cubre la mayoría de los enlaces de muestra, incluidas las partes del subdirectorio.

Regex es:

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

Si tiene el patrón de URL, debería poder buscarlo en su cadena. Sólo asegúrese de que el patrón imposible tener ^y $que marca el comienzo y final de la cadena URL. Entonces, si P es el patrón de URL, busque coincidencias para P.

manojlds
fuente
Esta es la expresión regular que encontré que verifica si una cadena completa es una URL. Saqué el ^ al principio y el $ al final como dijiste y todavía no funcionó. ¿Qué estoy haciendo mal? ^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&amp;%\$#\=~])*[^\.\,\)\(\s]$
user758263
Podría ayudar si mostrara el idioma que está usando. De cualquier manera, asegúrese de verificar http://regexpal.com/; allí puede probar diferentes expresiones contra su cadena hasta que lo haga bien.
entonio
@ user758263 - ¿realmente necesitas una expresión regular tan compleja para la URL? Depende de las posibles URL que pueda encontrar. También vea gskinner.com/RegExr para probar regex. También tienen cientos de muestras a la derecha debajo de la Communitypestaña, incluidas las de URL
manojlds
Estoy tratando de buscar todas las URL posibles y estoy usando C ++. Gracias por los enlaces entonio y manojlds. El sitio de gskinner fue especialmente útil ya que tenía muestras.
user758263
3

Usé la siguiente expresión regular para encontrar la URL en una cadena:

/(http|https)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/
aditya
fuente
2
[a-zA-Z]{2,3}es realmente deficiente para los TLD coincidentes, consulte la lista oficial: data.iana.org/TLD/tlds-alpha-by-domain.txt
Toto
3

Aquí una expresión regular un poco más optimizada:

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

Aquí está la prueba con datos: https://regex101.com/r/sFzzpY/6

ingrese la descripción de la imagen aquí

Mindaugas Jaraminas
fuente
2

Corto y sencillo. Todavía no lo he probado en código javascript, pero parece que funcionará:

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

Código en regex101.com

Vista previa del código

bafsar
fuente
1
Me gustó su expresión regular porque era exactamente lo que estaba buscando: necesitaba identificar y eliminar las URL de un texto, no validarlas. Trabajado en rieles.
Dagmar
@Dagmar Me alegra escuchar eso :)
bafsar
1

Esta es una ligera mejora en / ajuste a (dependiendo de lo que necesite) la respuesta de Rajeev:

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

Ver aquí un ejemplo de lo que hace y lo que no coincide.

Me deshice de la comprobación de "http", etc., ya que quería capturar las URL sin esto. Agregué un poco a la expresión regular para capturar algunas URL ofuscadas (es decir, donde el usuario usa [punto] en lugar de un "."). Finalmente reemplacé "\ w" con "AZ" y "{2,3}" para reducir los falsos positivos como v2.0 y "moo.0dd".

Cualquier mejora en esta bienvenida.

avjaarsveld
fuente
[a-zA-Z]{2,3}es realmente deficiente para los TLD coincidentes, consulte la lista oficial: data.iana.org/TLD/tlds-alpha-by-domain.txt . Además, sus coincidencias de expresiones regulares _.........&&&&&&no están seguras de que sea una URL válida.
Toto
Gracias por eso JE SUIS CHAELIE, ¿alguna sugerencia de mejora (especialmente para el falso positivo)?
avjaarsveld
1

Un método de trabajo probablemente demasiado simplista podría ser:

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

Lo probé en Python y siempre que el análisis de cadenas contenga un espacio antes y después y ninguno en la URL (que nunca antes había visto) debería estar bien.

Aquí hay un ide en línea que lo demuestra

Sin embargo, aquí hay algunos beneficios de usarlo:

  • Reconoce file:y localhosttambién direcciones IP.
  • Lo hará nunca se coincidir sin ellos
  • No le importa los caracteres inusuales como #o -(ver url de esta publicación)
Simón
fuente
1

El uso de la expresión regular proporcionada por @JustinLevene no tenía las secuencias de escape adecuadas en las barras diagonales inversas. Se actualizó para que ahora sea correcto, y se agregó en condición para que coincida también con el protocolo FTP: coincidirá con todas las URL con o sin protocolos, y sin "www".

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

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

Justin E. Samuels
fuente
1

Escribí uno yo mismo:

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

Funciona en TODOS los siguientes dominios:

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

Puede ver cómo funciona aquí en regex101 y ajustar según sea necesario

wongz
fuente
0

Utilizo la lógica de buscar texto entre dos puntos o puntos.

la expresión regular a continuación funciona bien con Python

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

Usé esto

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

Si quieres una explicación de cada parte, prueba en regexr [.] Com donde obtendrás una gran explicación de cada carácter.

Esto está dividido por un "|" u "OR" porque no todos los URI utilizables tienen "//", por lo que aquí es donde puede crear una lista de esquemas o condiciones que le interesaría hacer coincidir.

skrap3e
fuente
0

He utilizado la clase c # Uri y funciona, bien con la dirección 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
fuente
0

Me gustó la solución de Stefan Henze, pero obtendría 34,56. Es demasiado general y no he analizado html. Hay 4 anclajes para una URL;

www ,

http: \ (y co),

. seguido de letras y luego /,

o letras. y uno de estos: https://ftp.isc.org/www/survey/reports/current/bynum.txt .

Usé mucha información de este hilo. Gracias 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--)))"

Arriba resuelve casi todo excepto una cadena como "eurls: www.google.com, facebook.com, http: //test.com/", que devuelve como una sola cadena. Tbh idk por qué agregué Gopher, etc. Código de prueba 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
fuente
-1

Ésta es la mejor.

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

Este es el más simple. que funcionan para mí bien.

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

Es simplemente simple.

Utilice este patrón: \b((ftp|https?)://)?([\w-\.]+\.(com|net|org|gov|mil|int|edu|info|me)|(\d+\.\d+\.\d+\.\d+))(:\d+)?(\/[\w-\/]*(\?\w*(=\w+)*[&\w-=]*)*(#[\w-]+)*)?

Coincide con cualquier enlace que contenga:

Protocolos permitidos: http, https y ftp

Dominios permitidos: * .com, * .net, * .org, * .gov, * .mil, * .int, * .edu, * .info y * .me O IP

Puertos permitidos: verdadero

Parámetros permitidos: verdadero

Hashes permitidos: verdadero

Mahmoud Khudairi
fuente