java - 在字符串中查找 URL

标签 java regex string url

您好,我想在字符串中查找 URL,我使用正则表达式创建了很多关于此的主题,但我遇到了问题。使用这种模式:

String regex = "\\b(((ht|f)tp(s?)\\:\\/\\/|~\\/|\\/)|www.)" + 
            "(\\w+:\\w+@)?(([-\\w]+\\.)+(com|org|net|gov" + 
            "|mil|biz|info|mobi|name|aero|jobs|museum" + 
            "|travel|[a-z]{2}))(:[\\d]{1,5})?" + 
            "(((\\/([-\\w~!$+|.,=]|%[a-f\\d]{2})+)+|\\/)+|\\?|#)?" + 
            "((\\?([-\\w~!$+|.,*:]|%[a-f\\d{2}])+=?" +
            "([-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)" + 
            "(&(?:[-\\w~!$+|.,*:]|%[a-f\\d{2}])+=?" + 
            "([-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)*)*" + 
            "(#([-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)?\\b";

它在大多数页面上运行良好,但我在其他页面上遇到问题。例如:

http://hello.com/hello world

返回

http://hello.com/hello

问题是空间。

谁有解决这个问题的好模式?

谢谢。

编辑::这是我的代码

private ArrayList<String> pullLinks(String text) {
    ArrayList<String> links = new ArrayList<String>();

    String regex = "\\b(((ht|f)tp(s?)\\:\\/\\/|~\\/|\\/)|www.)" + 
            "(\\w+:\\w+@)?(([-\\w]+\\.)+(com|org|net|gov" + 
            "|mil|biz|info|mobi|name|aero|jobs|museum" + 
            "|travel|[a-z]{2}))(:[\\d]{1,5})?" + 
            "(((\\/([-\\w~!$+|.,=]|%[a-f\\d]{2})+)+|\\/)+|\\?|#)?" + 
            "((\\?([-\\w~!$+|.,*:]|%[a-f\\d{2}])+=?" +
            "([-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)" + 
            "(&(?:[-\\w~!$+|.,*:]|%[a-f\\d{2}])+=?" + 
            "([-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)*)*" + 
            "(#([-\\w~!$+|.,*:=]|%[a-f\\d]{2})*)?\\b";

    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(text);
    while(m.find()) {
    String urlStr = m.group();
    if (urlStr.startsWith("(") && urlStr.endsWith(")"))
    {
    urlStr = urlStr.substring(1, urlStr.length() - 1);
    }
    links.add(urlStr);
    }
    return links;
    }  

最佳答案

URL 中不允许有空格(需要用 %20 代替)。例如,请参阅此问题的答案:

如果您无论如何都允许 URL 包含空格,那么您将如何解释例如 http://www.google.com/ig 是一个不错的网页?显然/ig之后的部分不应该被包含在内!

关于java - 在字符串中查找 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9737717/

相关文章:

c++ - 需要在 Solaris 10 上为 GNU g++ 2.95.3 放置线程安全的 std::string

java - 在 2.4 上安装 gwt 2.1

Java 正则表达式组

c - strlen()值如何自动改变?

mysql - Sqoop 从 MySQL 导入 : Decimals always imported into Hive as String

python - 正则表达式帮助将列表拆分为二元组

jakarta-ee - jdk1.7/jre/lib/rt.jar的访问限制

java - 扫雷堆栈溢出错误

java - 如果名称中有空格,则无法在 Messenger 中共享音频

java - 正则表达式匹配 2 个或 3 个单词,但不匹配 1 个单词