我构造了一个正则表达式来检查一个单词是以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)\\://
6条答案
按热度按时间xbp102n01#
这里需要一个 * 完整的输入 * 匹配。
编辑:(基于@davidchambers的评论)
pzfprimi2#
除非有令人信服的理由使用正则表达式,否则我只会使用String.startsWith:
如果这样也更快我也不会惊讶。
b1zrtrql3#
如果你想用不区分大小写的方式来做,这是更好的:
pvabu6sv4#
我认为regex / string解析解决方案非常棒,但是对于这个特定的上下文,似乎只使用java的url解析器是有意义的:
https://docs.oracle.com/javase/tutorial/networking/urls/urlInfo.html
摘自该页:
得到以下结果:
sq1bmfud5#
test.matches()方法检查所有文本。使用test.find()
f4t66c6m6#
在startsWith和matches之间添加验证。
开头为:3755625
开头为:true
匹配次数:174250
匹配:真
匹配时间为174us,启动时间为3.755ms
matches在性能和场景中的代码清洁度方面比startsWith好得多。