修改正则表达式,以便在带有或不带有http前缀的字符串中查找URL

22 浏览
0 Comments

修改正则表达式,以便在带有或不带有http前缀的字符串中查找URL

这个问题已经有了答案:

什么样的正则表达式可以匹配URL?[重复]

我正在尝试在另一个字符串中检测URL。我从另一个SO得到了答案。然而,它不能满足我们需要的用例。

从字符串中检测和提取url?

        URL_REGEX = "(?:^|[\\W])((ht|f)tp(s?):\\/\\/|www\\.)"
            + "(([\\w\\-]+\\.){1,}?([\\w\\-.~]+\\/?)*"
            + "[\\p{Alnum}.,%_=?&#\\-+()\\[\\]\\*$~@!:/{};']*)";
        Pattern p = Pattern.compile(URL_REGEX, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL);
        String str = "hello example.com";    // DOES NOT WORK 
        //str = "$ANY_WORD example.com $ANY_WORD_1";    // DOES NOT WORK 
        str = "hello http://example.com";    // WORKS

你能将上面的正则表达式修改为 str =\"hello example.com\"也可以吗?

输入的字符串可以是许多单词和url的组合

admin 更改状态以发布 2023年5月23日
0
0 Comments

如果你只是在一个普通的字符串中查找,我不明白为什么要使用非捕获组开始你的正则表达式...

但是,如果你删除 (?:^|[\\W])((ht|f)tp(s?):\\/\\/|www\\.),它应该能工作。

不过,如果不加上 [a-z-]{5},你会错过 hello。

我大多数时候使用 https://regexr.com/ 来构建和测试我的正则表达式。

0