正则表达式解析文本中的 URL

正则表达式解析文本中的 URL

我有这个正则表达式:

[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
[email protected]

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

我怎样才能做到这一点?

更新

@slhck 你修改后的正则表达式几乎匹配所有内容,除了 url 以 www 开头的情况。例如 -“www.domain.com/带空格的引用 URL”

我对正则表达式做了一些更改,以匹配前导 www。它看起来像

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

您能否审阅一下?并建议是否存在更好的匹配方法。

答案1

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

[a-z]+[:.].*?(?=\s)

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

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

为了进一步匹配仅httphttps和可选,www请使用类似以下内容:

(https?):\/\/(www\.)?[a-z0-9\.:].*?(?=\s)

以下是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`!()\[\]{};:'".,<>?«»“”‘’]))

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

相关内容