2024-05-16 04:05:28 发布
网友
我开始编写一个正则表达式,试图捕获尽可能多的URL。然而,由于某种原因,我不能让它工作
Regex:
^(https?|ftps?|mailto|gopher|telnet|www\.)\:.+?\/(?=\s)
演示:Regex101
感谢您的帮助。Thx提前
您的模式\/(?=\s)要求URL以斜杠结尾。您可以通过在测试代码段中任何URL的末尾添加斜杠来检查这一点
\/(?=\s)
没有真正的理由这样做-您可以删除\/,并允许URL以任何后跟空格的字符结尾
\/
但是,除此之外,您还应该注意空格的功能不是很强大。如果URL出现在文本中,则后面可能会有标点或括号,标点或括号在技术上是有效的URL字符,您的筛选器(减去\/)将包括这些字符,即使它们可能不是URL的一部分
在这些情况下,显然存在一些歧义,但在URL末尾排除任何标点符号可能是更好的启发
(如果你想变得真的老练,你可以像GitHub的markdown解析器那样,在的末尾加上右括号,只要它们与URL中的左括号匹配。这有助于识别像(See https://en.wikipedia.org/wiki/Something_(disambiguation))这样的上下文中的链接。但仅使用正则表达式是不可行的,需要一些额外的处理。)
(See https://en.wikipedia.org/wiki/Something_(disambiguation))
你可以用
^(?:(?:https?|ftps?|gopher|telnet):\/\/|www\.|mailto:)\S+
见regex demo和its graph:
详细信息
^
(?:(?:https?|ftps?|gopher|telnet):\/\/|www\.|mailto:)
(?:https?|ftps?|gopher|telnet):\/\/
http
https
ftp
ftps
gopher
telnet
://
|
www\.
www.
mailto:
\S+
您的模式
\/(?=\s)
要求URL以斜杠结尾。您可以通过在测试代码段中任何URL的末尾添加斜杠来检查这一点没有真正的理由这样做-您可以删除
\/
,并允许URL以任何后跟空格的字符结尾但是,除此之外,您还应该注意空格的功能不是很强大。如果URL出现在文本中,则后面可能会有标点或括号,标点或括号在技术上是有效的URL字符,您的筛选器(减去
\/
)将包括这些字符,即使它们可能不是URL的一部分在这些情况下,显然存在一些歧义,但在URL末尾排除任何标点符号可能是更好的启发
(如果你想变得真的老练,你可以像GitHub的markdown解析器那样,在的末尾加上右括号,只要它们与URL中的左括号匹配。这有助于识别像
(See https://en.wikipedia.org/wiki/Something_(disambiguation))
这样的上下文中的链接。但仅使用正则表达式是不可行的,需要一些额外的处理。)你可以用
见regex demo和its graph:
详细信息
^
-字符串的开头(?:(?:https?|ftps?|gopher|telnet):\/\/|www\.|mailto:)
-任何一种(?:https?|ftps?|gopher|telnet):\/\/
-http
、https
、ftp
、ftps
、gopher
或telnet
然后://
子串|
-或www\.
-www.
子串|
-或mailto:
-mailto:
子串\S+
-1个或多个非空白字符李>相关问题 更多 >
编程相关推荐