regex - 正则表达式 - 解析域问题

标签 regex

我正在尝试查找域 - 除了子域之外的所有内容。

我现在有这个正则表达式:

(?:[-a-zA-Z0-9]+\.)*([-a-zA-Z0-9]+(?:\.[a-zA-Z]{2,3})){1,2}

这适用于以下情况:

domain.tld
subdomain.tld

但是它会遇到“.com.au”或“.co.uk”等顶级域名的麻烦:

domain.co.uk (finds co.uk, should find domain.co.uk)
subdomain.domain.co.uk (finds co.uk, should find domain.co.uk)

有什么想法吗?

最佳答案

我不确定这个问题是否“可以合理解决”; Mozilla 维护 a list of 'public suffix' domains其目的是帮助浏览器作者仅接受一个管理控制范围内的域的 cookie(例如,防止某人设置对 *.co.uk.*.union.aero 有效的 cookie。 )。它显然并不完美(接近尾声时,您会发现一长串 is-a-caterer.com 样式的域,因此 foo.is-a-caterer.com 无法设置 bar.is-a-caterer.com 使用的 cookie,但 is-a-caterer.com 完全没问题您定义的“域”。)

因此,如果您准备使用所提供的列表,您可以编写一个快速的小型解析器,它知道如何应用一般规则和异常(exception)来确定给定输入字符串中您的“域”的位置,并且仅返回您感兴趣的部分。

我认为更简单的方法注定会失败:一些ccTLDs例如 .ca 不使用二级域名,有些如 .br 使用数十个,有些如 lib.or.us 距离“域”有几个级别,例如 multnomah.lib.or.us。除非您使用哪些域是公共(public)后缀的精选列表,否则您注定会在某些重要的输入字符串集上出错。

关于regex - 正则表达式 - 解析域问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7856806/

相关文章:

javascript - 用于匹配 "Viewing 1 to 10 of 100"等字符串的正则表达式模式

正则表达式——仅 grep 字母字符

带有多个分隔符和表达式的javascript分割字符串

javascript - 如何在 javascript 正则表达式中从此 url 中获取数字

java - 修改大字符串

c# - 使用正则表达式从包含 SQL 查询的文件中提取表名

regex - 替换与 R 中特定模式匹配的列中的值

javascript - 使用正则表达式分割字符串?

java - 检查字符串中使用的特定字符?

sql - 如何在 hive 中获取字符串中的元素?