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

Posted

技术标签:

【中文标题】修改正则表达式以在带有或不带有 http 前缀的字符串中查找 URL [重复]【英文标题】:Modify regex to find URL in string with or without http prefix [duplicate] 【发布时间】:2018-10-31 17:47:47 【问题描述】:

我正在尝试检测另一个字符串中的 URL。我从另一个SO那里得到了答案。但是,它不适用于我们需要的用例。

Detect and extract url from a string?

        URL_REGEX = "(?:^|[\\W])((ht|f)tp(s?):\\/\\/|www\\.)"
            + "(([\\w\\-]+\\.)1,?([\\w\\-.~]+\\/?)*"
            + "[\\pAlnum.,%_=?&#\\-+()\\[\\]\\*$~@!:/;']*)";
        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的组合

【问题讨论】:

仅用于 hello 或 URL 前的任何其他词? @perreal URL 之前或之后的任何单词。字符串可以是多个单词和url的组合 重复问题中接受的答案有两个正则表达式模式,用于匹配带有或不带有 http(s)://www. 的 URL。如果您愿意,可以combine the two together 或like this 没有捕获组 【参考方案1】:

如果您只是按照您的指示在普通字符串中搜索,我不明白您为什么使用非捕获组开始您的正则表达式。但是..

它应该通过删除(?:^|[\\W])((ht|f)tp(s?):\\/\\/|www\\.) 来工作

但是除非你添加 [a-z-]5

,否则你会错过你好

我主要使用https://regexr.com/ 构建和测试我的正则表达式

【讨论】:

它不会捕获 URL 中的 http://。我需要它来处理带有 http 和不带 http 的子字符串。 ((http|https)\:\/\/)?[a-zA-Z0-9\.\/\?\:@\-_=#]+\.([a-zA-Z0-9\&\.\/\?\:@\-_=#]3) 但这将链接到通用 3 last tld

以上是关于修改正则表达式以在带有或不带有 http 前缀的字符串中查找 URL [重复]的主要内容,如果未能解决你的问题,请参考以下文章

带有正则表达式的 debezium 表白名单

如何使用 javascript 正则表达式替换 URL 的主机部分

JavaScript 正则表达式,用于带有一个点和 2 个小数的正数

尝试在查询中搜索带有或不带有破折号的字段?

如何修改这个正则表达式以在 Django 中接受这个 URL?

如何在 Laravel 中使用正则表达式路由前缀?