solo regulares regular probar numeros minimo matches letras expresiones expresion espacios espacio ejemplos ejemplo caracteres blanco alfanumerico java regex startswith

regulares - matches java ejemplo



Regex para verificar comienza con http://, https:// o ftp:// (5)

Estoy enmarcando una expresión regular para verificar si una palabra comienza con http:// o https:// o ftp:// , mi código es el siguiente,

public static void main(String[] args) { try{ String test = "http://yahoo.com"; System.out.println(test.matches("^(http|https|ftp)://")); } finally{ } }

Imprime false . También revisé stackoverflow post Regex para probar si la cadena comienza con http: // o https: //

La expresión regular parece ser correcta, pero ¿por qué no coincide? Incluso intenté ^(http|https|ftp)/:// y ^(http|https|ftp)//://


A menos que exista alguna razón convincente para usar una expresión regular, solo usaría String.startsWith:

bool matches = test.startsWith("http://") || test.startsWith("https://") || test.startsWith("ftp://");

No me sorprendería que esto sea más rápido también.


Creo que las soluciones de análisis regex / string son geniales, pero para este contexto en particular, parece que tendría sentido usar el analizador url de java:

https://docs.oracle.com/javase/tutorial/networking/urls/urlInfo.html

Tomado de esa página:

import java.net.*; import java.io.*; public class ParseURL { public static void main(String[] args) throws Exception { URL aURL = new URL("http://example.com:80/docs/books/tutorial" + "/index.html?name=networking#DOWNLOADING"); System.out.println("protocol = " + aURL.getProtocol()); System.out.println("authority = " + aURL.getAuthority()); System.out.println("host = " + aURL.getHost()); System.out.println("port = " + aURL.getPort()); System.out.println("path = " + aURL.getPath()); System.out.println("query = " + aURL.getQuery()); System.out.println("filename = " + aURL.getFile()); System.out.println("ref = " + aURL.getRef()); } }

produce lo siguiente:

protocol = http authority = example.com:80 host = example.com port = 80 path = /docs/books/tutorial/index.html query = name=networking filename = /docs/books/tutorial/index.html?name=networking ref = DOWNLOADING


El método test.matches () comprueba todo el texto. use test.find ()


Necesitas una coincidencia de entrada completa aquí.

System.out.println(test.matches("^(http|https|ftp)://.*$"));

Editar : (Basado en el comentario de @davidchambers )

System.out.println(test.matches("^(https?|ftp)://.*$"));


Si quieres hacerlo de una manera insensible a las mayúsculas y minúsculas, es mejor:

System.out.println(test.matches("^(?i)(https?|ftp)://.*$"));