使用 REGEX 表达式了解查询

Posted

技术标签:

【中文标题】使用 REGEX 表达式了解查询【英文标题】:Understanding query with REGEX expressions 【发布时间】:2018-02-22 19:30:22 【问题描述】:

因此,我正在查看一位已经离开一段时间的前雇员留下的东西的文档。我了解正则表达式,我只是不知道在这种情况下发生了什么。

TABLE_QUERY(server_logs_abc, 'REGEXP_MATCH(table_id, r"^def_[A-Za-z0-9]5_[\d]8") and datediff( current_timestamp(), timestamp( regexp_extract(table_id,r"(\d8)$") ) ) < 30')

也有这样的日常表

iserver_cogs_abc.def_4J389_20180221
iserver_cogs_abc.def_4J389_20180220
iserver_cogs_abc.def_4J389_20180219
iserver_cogs_abc.def_4J389_20180218

以此类推。

所以我理解这两个正则表达式。 REGEXP_MATCH 的第一个是命名约定:

def_4J389_2018XXXX

(XXXX 代表月份和日期时间码,即 0221)

REGEXP_EXTRACT 中的第二个 Regex 是 8 位时间码(即 20180221

但这一切放在一起意味着什么。此外,前导 r 意味着进行两个正则表达式部分(即 r"^def_[A-Za-z0-9]5_[\d]8"

【问题讨论】:

【参考方案1】:

第二个正则表达式提取表名的 YYYYMMDD 部分,然后将其转换为时间戳,最后与当前时间戳进行比较,DATEDIFF 然后返回这两个时间戳之间的天数

因此,它们一起返回仅返回与第一个正则表达式匹配的模式的最近 30 天表

截至r - 当用作字符串的前缀时 - 它使其成为在正则表达式中广泛使用的所谓原始字符串。例如 - 您可以使用两个反斜杠转义“\”、“_”或“%”。例如, ”\%”。如果您使用的是原始字符串,则只需要一个反斜杠。例如,r"\%" 我建议您谷歌搜索原始/文字字符串以获取更多详细信息

【讨论】:

以上是关于使用 REGEX 表达式了解查询的主要内容,如果未能解决你的问题,请参考以下文章

Mongodb数据库的模糊搜索

REGEX_EXTRACT_ALL 大查询

使用 $regex 查询 mongoose 不返回任何结果

在Alteryx中使用Regex Expression 正则表达式

C# 正则表达式(Regex) 过滤内容的基本使用

C# 正则表达式(Regex) 过滤内容的基本使用