我有一个用于匹配 URL 的正则表达式:
(?:\w+:\/{2})?(?:\w+:\w+@)?(?:\w+(?:\.|-\w+)*\.)+[a-zA-Z]{2,}(?::\d+)?(?:\/[^\s]*)?(?:\?\S*)?
这是细分:
(?:\w+:\/{2})? http://
(?:\w+:\w+@)? username:password@
(?:\w+(?:\.|-\w+)*\.)+ google.us.
[a-zA-Z]{2,} .com, .org. co, io
(?::\d+)? :8080
(?:\/[^\s]*)? /about/us
(?:\?\S*)? Query parmas ?utm_param=Facebook
但是,此正则表达式匹配“[email protected]”。如何确保电子邮件中不包含任何网址?我尝试过添加
(?<!@)
到正则表达式的开头,但没有运气。
您必须至少定义一些 URL 镶边(可能是协议,或者主机后面的尾部斜杠)作为强制要求,或者禁止 HTTP 用户名规范,以便停止将电子邮件地址与您的模式进行匹配。