我正在构建一个正则表达式来检查单词是以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
。我还检查了stackoverflow post Regex to test if string begins with http:// or https://
正则表达式似乎是正确的,但为什么它不匹配?我甚至试过^(http|https|ftp)\://
和^(http|https|ftp)\\://
答案 0 :(得分:85)
您需要整个输入匹配。
System.out.println(test.matches("^(http|https|ftp)://.*$"));
修改 :(基于@davidchambers的评论)
System.out.println(test.matches("^(https?|ftp)://.*$"));
答案 1 :(得分:34)
除非有一些令人信服的理由使用正则表达式,否则我只会使用String.startsWith:
bool matches = test.startsWith("http://")
|| test.startsWith("https://")
|| test.startsWith("ftp://");
如果速度更快,我也不会感到惊讶。
答案 2 :(得分:4)
如果你想以不区分大小写的方式做,那就更好了:
System.out.println(test.matches("^(?i)(https?|ftp)://.*$"));
答案 3 :(得分:0)
test.matches()方法检查所有text.use test.find()