regulares regular probar expresiones expresion espacio ejemplos crear blanco alfanumerico regex validation url

regular - Regex para la validación de URL con la captura de piezas



expresiones regulares java (2)

¿Se puede usar una sola expresión regular para validar urls y unir todas las partes, he estado trabajando en una y lo que he encontrado hasta ahora es:

(?:(?P<scheme>[a-z]*?)://)?(?:(?P<username>.*?):?(?P<password>.*?)?@)?(?P<hostname>.*?)/(?:(?:(?P<path>.*?)/?)?(?P<file>.*?/.[a-z]{1,6})?(?:(?:(?P<query>.*?)#?)?(?P<fragment>.*?)?)?)?

sin embargo, esto no funciona, debe coincidir con todos los ejemplos siguientes:

http: // nombre de usuario: [email protected]/path? arg = value # anchor
http://www.domain.com/
http://www.doamin.co.uk/
http://www.yahoo.com/
http://www.google.au/
https: // nombre de usuario: contraseñ[email protected]/
ftp: // usuario: [email protected]/path/
https: //www.blah1.subdoamin.doamin.tld/
domain.tld / # anchor
doamin.tld /? query = 123
domain.co.uk/
domain.tld
http: //www.domain.tld/index.php? var1 = blah
http: //www.domain.tld/path/to/index.ext
mailto: //[email protected]

y proporcionar una captura con nombre para todos los componentes:

esquema por ejemplo. http https ftp ftps callto mailto y cualquier otro que no esté en la lista
usuario
contraseña
nombre de host incluyendo subdominios, domaina y tld
ruta, por ejemplo, / images / profile /
nombre de archivo eg archivo.ext
cadena de consulta, por ej. ? foo = bar & bar = foo
fragmento por ejemplo. #ancla

Con el nombre de host como el único campo obligatorio.

Podemos suponer que esto proviene de un formulario que solicita específicamente una url y no se usará para buscar enlaces en el texto.


¿Se puede usar una sola expresión regular para validar urls y unir todas las partes?

No.

La expresión regular de Strager es impresionante, pero al final del día es menos legible, sostenible y confiable que solo usar un analizador URI apropiado. Rechaza necesariamente los URI válidos y acepta cadenas que no son URI, porque las reglas para formatear los URI no se pueden expresar completamente en una expresión regular.

mailto: //[email protected]

No debería haber un ''//'' en un URI de mailto. No puede decir qué formato será el resto (posterior a :) del URI hasta que haya leído el esquema; muchos esquemas de URI no se ajustan al formato credenciales @ host / ruta. Lo mejor es aceptar solo esquemas específicos donde sepa cómo analizar sus URI.


Versión modificada de la expresión regular de mingfai :

/^((?P<scheme>https?|ftp)://)?//?((?P<username>.*?)(:(?P<password>.*?)|)@)?(?P<hostname>[^:///s]+)(?P<port>:([^//]*))?(?P<path>(///w+)*//)(?P<filename>[-/w.]+[^#?/s]*)?(?P<query>/?([^#]*))?(?P<fragment>#(.*))?$/