我有这个正则表达式:
[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]
我需要匹配以下内容 - 仅粗体文本:
- regexbuddy.com
- www.regexbuddy.com
- http://regexbuddy.com风险资本
- http://www.regexbuddy.com心率变异系数
- http://www.regexbuddy.com/G
- http://www.regexbuddy.com/index.htmlF
- http://www.regexbuddy.com/index.html?source=libraryF
- 您可以在以下位置下载 RegexBu ddyhttp://www.regexbuddy.com/download.html。F
- “www.domain.com/quoted带有空格的 URL”
http://10.2.2.1.2/ttxx/txt/gg
五 [电子邮件保护]
我怎样才能做到这一点?
更新
@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
为了进一步匹配仅http
或https
和可选,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 的最佳正则表达式是什么?