正则表达式匹配URL与www并没有连续的点

时间:2016-04-06 08:56:52

标签: java regex url

你能用正则表达式帮助我吗?

我有行

"Sites www.google.com и www.ridd.rdd..com good."

解析后,我得到这种类型的行:

"Sites http://www.google.com и www.ridd.rdd..com good."

检查连续点的问题。 对于有错误的网站(连续两个点)"http//:"不应附加

我的正则表达式:

 Matcher matchr = Pattern.compile("w{3}(\\.\\w+)+[a-z]{2,6}").matcher(text);

        while (matchr.find()) {
            text = text.replace(matchr.group(0), "http://" + matchr.group(0));
        }

        System.out.println(text);

1 个答案:

答案 0 :(得分:1)

你的正则表达式w{3}(\\.\\w+)+[a-z]{2,6}匹配 的第二个错误" URL", www.ridd.rdd .. com。因此,您需要确保匹配的子字符串没有连续的点。您可以使用单词边界和否定前瞻(?!\S*\.{2})

使用

String text = "Sites www.google.com и www.ridd.rdd..com good.";
text = text.replaceAll("\\b(?!\\S*\\.{2})w{3}(\\.\\w+)+[a-z]{2,6}\\b", "http://$0");
// => Sites http://www.google.com и www.ridd.rdd..com good.

请参阅IDEONE demo

模式说明:

  • \\b - 领先的字边界
  • (?!\\S*\\.{2}) - 非白色空间块中不应有任何连续的点跟随
  • w{3} - 匹配www
  • (\\.\\w+)+ - 1个.序列,后跟1个字母数字或下划线字符
  • [a-z]{2,6} - 确保有2到6个a-z个字母......
  • \\b - 在此" word"
  • 的末尾