如何检查一个组中的所有项目是否包含在多个项目的字符串中? - 正则表达式

How to check if all items in a group are contained in a string for many items? - RegEx

我正计划在我的 SQL 查询中嵌入 RegEx,因此不能真正为此使用循环。

本质上,我正在尝试检查一系列组以查看我的列的名称是否包含任何这些单独组的所有属性(即必须独立而不是完全检查组)。

例如,

group1 = l, w, q
group2 = o, l, d

如果列名包含 group1 中的所有项目(例如 low_quality)应该 return true。同样,cold 也会 return true 因为它匹配 group2.

中的每个项目

我将如何验证我的列名称是否包含任何组中的每个项目? (项目可以超过 1 个字符,我有大约 40 个组要测试)。

是否可以修改以下内容?

SELECT column_name,
       (CASE WHEN REGEXP_LIKE(column_name, ((?=l)(?=w)(?=q))|((?=o)(?=l)(?=d))) THEN true ELSE NULL
        END) AS flag
FROM information_schema.columns;

我只是不确定如何独立检查多个组。

您可以使用

REGEXP_LIKE(column_name, '^(?:(?=.*l)(?=.*w)(?=.*q)|(?=.*o)(?=.*l)(?=.*d))')

详情:

  • ^ - 字符串开头
  • (?: - 匹配以下两种模式之一的非捕获组:
    • (?=.*l)(?=.*w)(?=.*q) - lwq 任意顺序
  • | - 或者
    • (?=.*o)(?=.*l)(?=.*d) - old 任意顺序
  • ) - 小组结束。