在字符串中搜索URL

时间:2014-03-09 15:43:26

标签: java regex url

我有以下功能

private static String changeUrl(String text) {    

        String regex = "\\(?\\b(http://|www[.])[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]";

        Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
        Matcher m = p.matcher(text);

        while(m.find()) {
            // get whole matching
            String urlStr = m.group();

            if (urlStr.startsWith("(") && urlStr.endsWith(")")) {
                urlStr = urlStr.substring(1, urlStr.length() - 1);
            }


            System.out.println(urlStr);

            return text;
    }

工作正常,并打印网址,但无法找到

形式的网址
  • /example.com/something/sdfs/sdf/skdjf.sdfj
  • /something/sdfs/sdf/skdjf.sdfj

我可以改变模式,但我是正则表达式的新手,并且不想产生副作用。那么是否有经过测试的正则表达式模式可以识别所有可能性? 谢谢。

1 个答案:

答案 0 :(得分:1)

您似乎希望将/添加为另一个选项作为网址的开头。为此,您可以更改

(http://|www[.])

部分类似于

(http://|www[.]|/)

我也会考虑使用URI URLFile类来处理此类数据而不是正则表达式,但因为我不知道你是如何使用这个正则表达式的(更多输入)例子很有帮助)我很难就这个问题说些什么。