怎么做正则二级域名泛解析格式的查询

2022 年 1 月 21 日
 dzdh

如库里:

domain
*.baidu.com
a.baidu.com
select * from 'b.baidu.com' ~* domain;

报错 ERROR: invalid regular expression: quantifier operand invalid

2823 次点击
所在节点    PostgreSQL
10 条回复
qwerthhusn
2022 年 1 月 21 日
like '%.baidu.com'
alsotang
2022 年 1 月 21 日
from 后面不是应该跟 table 名称吗
liuxu
2022 年 1 月 21 日
这个帖子问的太过分了,我 google 都不想帮你贴了
dzdh
2022 年 1 月 21 日
@alsotang 忽略。。。sql 手打的漏了。。有表名的
dzdh
2022 年 1 月 21 日
@qwerthhusn 根据什么把传过来的参数给去掉呢

如果参数是 a.baidu.com ,可以 去掉第一位 三级四级咧
jinliming2
2022 年 1 月 21 日
@dzdh 没看懂,什么叫“根据什么把传过来的参数给去掉呢”
SELECT * FROM domains WHERE domain ~* '^[^\.]+\.baidu\.com$'; -- 这个可以只匹配二级域名,而不匹配三级、四级等
如果你是想指定匹配一级域名的话,那比较困难,因为一级域名的后缀是一个很长的列表,比如 .com 、.cn 这类只有一个尾缀的,还有 .com.cn 这类有两个尾缀的,还有 google 这样的公司名域名( https://domains.google ),还有 .中国 .中國 .香港 .個人.香港 这类一个尾缀或两个尾缀的中文域名……
列表应该是 https://raw.githubusercontent.com/publicsuffix/list/master/public_suffix_list.dat 的 ===BEGIN ICANN DOMAINS=== 到 ===END ICANN DOMAINS=== 中间的部分
0ZXYDDu796nVCFxq
2022 年 1 月 21 日
查两次,一次 `domain`=='b.baidu.com'
没结果则把主机名替换成*,b.baidu.com --> *.baidu.com
然后 `domain`=='*.baidu.com'
dzdh
2022 年 1 月 23 日
@jinliming2

其实就是库里存了一堆证书 certs: cn varchar (*.baidu.com, baidu.com, a.baidu.com), cert, priv

想实现 ,根据当前 host 取出对应的证书。比如 host 是 a.baidu.com ,就取 a.baidu.com 的证书,是 xx.baidu.com 就取出 *.baidu.com 的证书,host 是 baidu.com 就取出 baidu.com 的证书
jinliming2
2022 年 1 月 23 日
@dzdh emmmm ,不知道我理解的对不对:
data:;base64,U0VMRUNUIENPQUxFU0NFKAogIChTRUxFQ1QgKiBGUk9NIGRvbWFpbnMgV0hFUkUgZG9tYWluID0gJ2FhLmJhaWR1LmNvbScpLAogIChTRUxFQ1QgKiBGUk9NIGRvbWFpbnMgV0hFUkUgZG9tYWluID0gUkVHRVhQX1JFUExBQ0UoJ2FhLmJhaWR1LmNvbScsICdeW14uXSsnLCAnKicpKQopOw==
用 COALESCE 分成两次查询,第一次绝对匹配,能匹配到直接返回,匹配不到的话,再进行第二次匹配。第二次先用正则把域名开头的子域名替换为 * 再进行绝对匹配。因为通配符证书只能匹配一级子域名,所以只需要 replace 一级。

P.S.: 额,直接发 SQL 被 CloudFlare 拦截了……
dzdh
2022 年 1 月 23 日
@jinliming2 最终决定改动入参用 or 了。。openresty 的 lua

select cert,priv from certs where domain = '*.baidu.com' or domain = 'a.baidu.com'

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/829760

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX