【发布时间】:2023-01-23 18:01:58
【问题描述】:
我知道这个案例有很多解决方案、文章和库,但找不到一个符合我的案例。我正在尝试编写一个正则表达式来从文本(电子邮件中的人的签名)中提取 URL(代表网站),并且有多种情况:
- 可以包含 http(s):// ,也可以不包含
- 可以包含 www. , 或不
- 可以有多个顶级域名,例如“test.com.cn”
这里有些例子:
www.test.com
https://test.com.cn
http://www.test.com.cn
test.com
test.com.cn
我想出了以下正则表达式:
(https?://)?(www\.)?\w{2,}\.[a-zA-Z]{2,}(\.[a-zA-Z]{2,})?$
但这有两个主要问题,因为签名可以包含电子邮件地址:
- 它(错误地)捕获像这样的电子邮件的 TLD:name.surname@test2.com
- 它不会捕获行中间的 URLS,如果我删除末尾的 $ 符号,它会捕获最后一个示例的
name.surname部分对于 (1) 我尝试使用
negative lookbehind,将这个(?<!@)添加到开头,问题是现在它捕获了est2.com而不是根本不匹配它。
【问题讨论】: