正则表达式从文本解析 URL

asa*_*adz 3 regex

我有这个正则表达式:

[az]+[:.].*?\s

我在以下文本上运行它:

regexbuddy.com
www.regexbuddy.com
http://regexbuddy.com cvc
http://www.regexbuddy.com cvcv
http://www.regexbuddy.com/ g
http://www.regexbuddy.com/index.html f
http://www.regexbuddy.com/index.html?source=library f
You can download RegexBu    ddy at http://www.regexbuddy.com/download.html. f
"www.domain.com/quoted URL with spaces"
http://10.2.2.1.2/ttxx/txt/gg v
support@regexbuddy.com
Run Code Online (Sandbox Code Playgroud)

我需要匹配以下内容 - 仅粗体文本:

我怎样才能做到这一点?

更新

@slhck 您修改后的正则表达式几乎匹配所有内容,除非 url 以 www 开头。例如 - “www.domain.com/quoted URL with space”

我对正则表达式进行了一些更改以匹配领先的 www。看起来像

(https?)://。(?=\s)|(www.)。?(?=\s)

你能回顾一下吗?并建议是否存在更好的匹配方法。

slh*_*hck 7

如果您不想在匹配中包含尾随空格,请使用负前瞻:

[a-z]+[:.].*?(?=\s)
Run Code Online (Sandbox Code Playgroud)

在您的示例中,这将匹配:

regexbuddy.com
www.regexbuddy.com
http://regexbuddy.com
http://www.regexbuddy.com
http://www.regexbuddy.com/
http://www.regexbuddy.com/index.html
http://www.regexbuddy.com/index.html?source=library
http://www.regexbuddy.com/download.html.
www.domain.com/quoted
http://10.2.2.1.2/ttxx/txt/gg
Run Code Online (Sandbox Code Playgroud)

要进一步仅匹配httporhttps和可选的www使用类似的东西:

(https?):\/\/(www\.)?[a-z0-9\.:].*?(?=\s)
Run Code Online (Sandbox Code Playgroud)

这是John Gruber 的正则表达式,用于检查看起来像 URL 的内容,这在您的情况下似乎很有效:

(?i)\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))
Run Code Online (Sandbox Code Playgroud)

但老实说,所有这些方法迟早只会让你得到错误的匹配。如果您需要正则表达式来解析 URL,请参阅此堆栈溢出问题:检查字符串是否为有效 URL 的最佳正则表达式是什么?