Подтвердить что ты не робот

Регулярное выражение для проверки начинается с http://, https://или ftp://

Я создаю регулярное выражение, чтобы проверить, начинается ли слово с http:// или https:// или ftp://, мой код выглядит следующим образом:

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

    }
}

Он печатает false. Я также проверил postoverflow post Regex, чтобы проверить, начинается ли строка с http://или https://

Регулярное выражение кажется правильным, но почему оно не соответствует?. Я даже пробовал ^(http|https|ftp)\:// и ^(http|https|ftp)\\://

4b9b3361

Ответ 1

Здесь вам нужно полное совпадение ввода.

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

Изменить:( На основе комментария @davidchambers)

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

Ответ 2

Если есть некоторая веская причина использовать регулярное выражение, я бы просто использовал String.startsWith:

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

Я не удивлюсь, если это будет быстрее.

Ответ 3

Если вы хотите сделать это без учета регистра, это лучше:

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

Ответ 4

Метод test.matches() проверяет все text.use test.find()