我需要帮助构建一个可以正确匹配自由文本中的 URL 的正则表达式。
- 方案
- 以下之一:ftp、http、https(ftps是协议吗?)
- 可选用户(和可选通行证)
- 主机(支持 IDN)
- 支持www和子域(支持 IDN)
- TLD 的基本过滤(
[a-zA-Z]{2,6}
我认为就足够了)
- 可选端口号
- 路径(可选,支持 Unicode 字符)
- 查询(可选,支持 Unicode 字符)
- 片段(可选,支持 Unicode 字符)
以下是我可以找到的有关子域的信息:
“子域”表示相对依赖,而不是绝对依赖:例如,wikipedia.org 包含 org 域的子域,而 en.wikipedia.org 包含域 wikipedia.org 的子域。理论上,这个细分可以下到 127 级深度,每个 DNS 标签最多可以包含 63 个字符,只要整个域名的总长度不超过 255 个字符。
关于域名本身,我找不到任何可靠的来源,但我认为非 IDN的正则表达式(我不确定如何编写 IDN 兼容版本)类似于:
[0-9a-zA-Z][0-9a-zA-Z\-]{2,62}
有人可以帮我解决这个正则表达式或指出一个好的方向吗?