。* mysql中的表达式不起作用

时间:2016-05-11 16:20:19

标签: python mysql regex

我正在尝试在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-.*)的正则表达式,它可以正常工作,但是将其添加到我的正则表达式的其余部分,它不会返回任何结果,不确定为什么?

2 个答案:

答案 0 :(得分:1)

事实证明它正在运行,问题在于 - 路由器 - 不匹配其他内容,例如updatedate和installdate。所以正则表达式适用于.*-router-.*

答案 1 :(得分:0)

这在任何地方都不是一个有效的正则表达式 - 似乎你正在混淆shell通配符,这些通配符不一样。

你需要一些东西来重复* - 例如(.*-router-.*)