我需要一个正则表达式字符串来匹配以&#34开头的网址; http://"," https://"," www。", " google.com"
我尝试使用的代码是:
//Pattern to check if this is a valid URL address
Pattern p = Pattern.compile("(http://|https://)(www.)?([a-zA-Z0-9]+).[a-zA-Z0-9]*.[a-z]{3}.?([a-z]+)?");
Matcher m;
m=p.matcher(urlAddress);
但此代码只能匹配网址,例如" http://www.google.com"
我知道这可能是一个重复的问题但是我已经尝试了所有提供的正则表达式并且它不符合我的要求。威尔有人请帮帮我吗?谢谢。
答案 0 :(得分:15)
您需要将(http://|https://)
作为可选项加入正则表达式。
^(http:\/\/|https:\/\/)?(www.)?([a-zA-Z0-9]+).[a-zA-Z0-9]*.[a-z]{3}.?([a-z]+)?$
答案 1 :(得分:8)
您可以使用Apache commons库(org.apache.commons.validator.UrlValidator)验证网址:
String[] schemes = {"http","https"}.
UrlValidator urlValidator = new UrlValidator(schemes);
并使用: -
urlValidator.isValid(your url)
然后就不需要正则表达式了。
答案 2 :(得分:5)
如果你使用Java,我建议使用这个RegEx(我自己写的):
^(https?:\/\/)?(www\.)?([\w]+\.)+[\w]{2,63}\/?$
"^(https?:\\/\\/)?(www\.)?([\\w]+\\.)+[\\w]{2,63}\\/?$" // as Java-String
解释:
-
如果你用特殊字符扩展它,它可能如下所示:
^(https?:\/\/)?(www\.)?([\w\Q$-_+!*'(),%\E]+\.)+[\w]{2,63}\/?$
"^(https?:\\/\\/)?(www\.)?([\\w\\Q$-_+!*'(),%\\E]+\\.)+[\\w]{2,63}\\/?$" // as Java-String
Avinash Raj的回答并不完全正确。
^(http:\/\/|https:\/\/)?(www.)?([a-zA-Z0-9]+).[a-zA-Z0-9]*.[a-z]{3}.?([a-z]+)?$
点不会被转义,这意味着它与任何角色匹配。此外,我的版本更简单,我从来没有听说过像“test..com”这样的域名(实际上匹配......)
-
演示:https://kb.ucla.edu/articles/what-characters-can-go-into-a-valid-http-url
答案 3 :(得分:4)
@ Avinash的Java兼容版本的答案是
//Pattern to check if this is a valid URL address
Pattern p = Pattern.compile("^(http://|https://)?(www.)?([a-zA-Z0-9]+).[a-zA-Z0-9]*.[a-z]{3}.?([a-z]+)?$");
Matcher m;
m=p.matcher(urlAddress);
boolean matches = m.matches();
答案 4 :(得分:2)
pattern="w{3}\.[a-z]+\.?[a-z]{2,3}(|\.[a-z]{2,3})"
这只接受例如www.google.com& www.google.co.in
答案 5 :(得分:-1)
//我用
static boolean esURL(String cadena){
boolean bandera = false;
bandera = cadena.matches("\\b(https://?|ftp://|file://|www.)[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]");
return bandera;
}