我正在尝试在pyhton脚本中编写SQL查询,以便每15天根据我环境中的主机自动收集信息集合。要做到这一点,我需要使用正则表达式,因为我正在使用很多名称变体,所以使用LIKE不是一个选项,否则我会有大约80个喜欢。
我遇到的一个问题是,一些名称中间有标识符。通常,主机的名称类似于Desktop-Acc-1515或类似的东西。但网络设备(在我开始工作之前设计)被命名为“set151-router-b1-5b42”。这是一个粗略的想法。
通常,我会使用类似.*-router-.*
的正则表达式,它在正常环境中工作,但MySQL似乎不喜欢它,因为它在-router-中返回0结果。
那么如何执行MySQL正则表达式查询以在-router的两边寻找“任何东西” -
这是我正在做的事情的编辑版本。
SET SESSION group_concat_max_len = 1000000;
SELECT Count(distinct table1.HostName)
FROM vulnerability
LEFT JOIN table2 on table1.Id = table2.Id
LEFT JOIN table3 on table1.Id = table3.Id
LEFT JOIN table4 on table1.Id = table4.Id
LEFT JOIN table5 on table1.Id = table5.Id
LEFT JOIN table6 on table1.Id = table6.Id
WHERE table1.UpdateDate > (NOW() - INTERVAL 20 DAY)
AND table2.InstallDate > (NOW() - INTERVAL 20 DAY)
AND table1.Hostname REGEXP
"Desktop-(Oregon|Idaho|Wyoming)|WorkStation-(Oregon|Idaho|Wyoming)|(.*-router-.*)"
更新/编辑
奇怪的是,如果我使用JUST (.*-router-.*)
的正则表达式,它可以正常工作,但是将其添加到我的正则表达式的其余部分,它不会返回任何结果,不确定为什么?
答案 0 :(得分:1)
事实证明它正在运行,问题在于 - 路由器 - 不匹配其他内容,例如updatedate和installdate。所以正则表达式适用于.*-router-.*
答案 1 :(得分:0)
这在任何地方都不是一个有效的正则表达式 - 似乎你正在混淆shell通配符,这些通配符不一样。
你需要一些东西来重复* - 例如(.*-router-.*)
。