【问题标题】:Google BigQuery possible to do Case-Insensitive REGEXP_Match?Google BigQuery 可以做不区分大小写的 REGEXP_Match?
【发布时间】:2017-08-16 16:27:27
【问题描述】:

在 Google BigQuery 中,我想检查“确认”或“确认”:

REGEXP_CONTAINS(h.page.PagePath, r'Confirm') or
REGEXP_CONTAINS(h.page.PagePath, r'confirm'))

我是 Perl 人,我们在 Perl 中是这样的

$foo =~ /confirm/i    # case-insensitive

Google BigQuery 是否有任何标志可以修改 REGEXP_MATCH?我在他们的在线文档中没有看到任何示例。

【问题讨论】:

    标签: regex google-bigquery


    【解决方案1】:

    REGEXP_CONTAINS 使用RE2 library,所以你可以使用这样的内联修饰符:

    REGEXP_CONTAINS(h.page.PagePath, r'(?i)confirm') 
                                       ^^^^  
    

    参见 RE2 文档:

    (?flags)    在当前组内设置标志;非捕获 ...
    标志
    i  不区分大小写(默认为 false)
    m  多行模式:^$ 匹配开始/结束行以及开始/结束文本(默认 false)
    s  让 . 匹配 \n(默认 false)
    U  不贪婪:交换 x*x*?x+x+? 的含义,等(默认为假)

    标志语法为xyz(设置)或-xyz(清除)或xy-z(设置xy,清除z)。

    【讨论】:

    • 这是一种添加标志的有趣方式。我试过了(注意我在 Google Big Query 环境中,在这个环境中我使用的是标准 SQL,而不是旧版 SQL)。所以我试了一下: REGEXP_CONTAINS(h.page.PagePath, r'(?i)Confirm') 但我收到了这条消息: Query Failed Error: Syntax error: Parenthesized expression cannot be parsed as an expression, struct constructor, or subquery at [30:22]
    • SQL 不支持正则表达式。不过你可以create a UDF
    • 你可能总是在硬编码的情况下工作:'[cC][oO][nN][fF][iI][rR][mM]'
    • (?i) 在 BigQuery 中运行良好 - 这是一个示例:SELECT REGEXP_CONTAINS(text, r'(?i)confirm'), REGEXP_CONTAINS(text, r'confirm') FROM ( SELECT 'I Confirm that it works' text) 你能给出你的实际查询以查看错误来自哪里
    • 更新,我打错了,r'(?i)somestring' 按预期工作。这有效:当 REGEXP_CONTAINS(h.page.PagePath, r'(?i)Confirm') 然后 'XYZZY'
    【解决方案2】:

    没有那么优雅,但我只是使用了这个:

    REGEXP_CONTAINS(UPPER(sources), "CLAIMS")
    

    【讨论】:

      猜你喜欢
      • 2017-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-05
      • 2013-04-17
      • 1970-01-01
      相关资源
      最近更新 更多