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

2022-01-21 16:59:04 +08:00
 dzdh

如库里:

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

报错 ERROR: invalid regular expression: quantifier operand invalid

2162 次点击
所在节点    PostgreSQL
10 条回复
qwerthhusn
2022-01-21 17:23:04 +08:00
like '%.baidu.com'
alsotang
2022-01-21 17:39:18 +08:00
from 后面不是应该跟 table 名称吗
liuxu
2022-01-21 17:58:37 +08:00
这个帖子问的太过分了,我 google 都不想帮你贴了
dzdh
2022-01-21 18:30:47 +08:00
@alsotang 忽略。。。sql 手打的漏了。。有表名的
dzdh
2022-01-21 18:33:03 +08:00
@qwerthhusn 根据什么把传过来的参数给去掉呢

如果参数是 a.baidu.com ,可以 去掉第一位 三级四级咧
jinliming2
2022-01-21 22:01:40 +08:00
@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-01-21 22:39:23 +08:00
查两次,一次 `domain`=='b.baidu.com'
没结果则把主机名替换成*,b.baidu.com --> *.baidu.com
然后 `domain`=='*.baidu.com'
dzdh
2022-01-23 02:55:10 +08:00
@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-01-23 21:26:47 +08:00
@dzdh emmmm ,不知道我理解的对不对:
data:;base64,U0VMRUNUIENPQUxFU0NFKAogIChTRUxFQ1QgKiBGUk9NIGRvbWFpbnMgV0hFUkUgZG9tYWluID0gJ2FhLmJhaWR1LmNvbScpLAogIChTRUxFQ1QgKiBGUk9NIGRvbWFpbnMgV0hFUkUgZG9tYWluID0gUkVHRVhQX1JFUExBQ0UoJ2FhLmJhaWR1LmNvbScsICdeW14uXSsnLCAnKicpKQopOw==
用 COALESCE 分成两次查询,第一次绝对匹配,能匹配到直接返回,匹配不到的话,再进行第二次匹配。第二次先用正则把域名开头的子域名替换为 * 再进行绝对匹配。因为通配符证书只能匹配一级子域名,所以只需要 replace 一级。

P.S.: 额,直接发 SQL 被 CloudFlare 拦截了……
dzdh
2022-01-23 23:37:22 +08:00
@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