java模式匹配问题

时间:2014-07-11 09:41:46

标签: java regex string

我在编写正确的正则表达式以匹配网址时遇到问题。

String input = "AAAhttp://www.gmail.comBBBBabc@gmail.com"    
String regex = "www.*.com"  // To match www.gmail.com URL    
Pattern p = Pattern.compile(regex)
Matcher m = p.matcher(input)
while(m.find()){

}    

我想删除网址www.gmail.com。但是它匹配到字符串的结尾以匹配以gmail.com结尾的电子邮件地址。 有人可以帮助我获得正确的正则表达式只匹配URL吗?

3 个答案:

答案 0 :(得分:0)

.*进行贪婪的比赛。您必须在?之后添加*才能进行不情愿的匹配。

"www\\..*?\\.com"

您的代码将是,

    String s = "AAAhttp://www.gmail.comBBBBabc@gmail.com";
    Pattern p = Pattern.compile("www\\..*?\\.com");
    Matcher m = p.matcher(s);
    while (m.find()) {
      System.out.println(m.group(0));
    }

IDEONE

答案 1 :(得分:0)

String regex = "www\\..*?\\.com"

非贪婪地重复使用通配符'。'并按字面意思转义点

答案 2 :(得分:0)

否定字符类比.*?

更快

使用此正则表达式:

www\.[^.]+\.com

[^.]+表示任何不是点的字符。

在Java中,我们需要转义一些字符:

// for instance
Pattern regex = Pattern.compile("www\\.[^.]+\\.com");
// etc