修改正则表达式以在带有或不带有 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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 javascript 正则表达式替换 URL 的主机部分
JavaScript 正则表达式,用于带有一个点和 2 个小数的正数