我有以下功能

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;
    }


它工作正常,可以打印URL,但是找不到表单中的URL


/example.com/something/sdfs/sdf/skdjf.sdfj
/something/sdfs/sdf/skdjf.sdfj


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

最佳答案

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

(http://|www[.])


一部分喜欢

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




我也将考虑使用URI URLFile类代替正则表达式来处理此类数据,但是由于我不知道您如何使用此正则表达式(一些更多的输入示例会有所帮助),因此很难我要说更多关于这个问题的话。

09-12 13:02