BigQuery报错Cannot parse regular expression,REGEXP_REPLACE语法问题如何解决?
报错原因
- 核心问题是
REGEXP_REPLACE函数的正则匹配参数(第二个入参)的单引号转义写法错误:你意图用'''表示匹配单引号字符,但在BigQuery SQL语法中,用单引号包裹的字符串内部如果要表示一个单引号字符,需要写两个连续的单引号,也就是整个匹配单引号的参数应该是''''(前后两个是字符串边界,中间两个转义为1个单引号字符)。你当前写的'''会被解析为:前两个单引号转义为1个单引号,第三个单引号作为字符串结束符,后续的, '')会被误识别为正则表达式的一部分,因此触发正则解析错误。 - 额外优化提示:
JSON_EXTRACT返回的JSON字符串默认会自带外层双引号,如果你只是要提取字段的字符串值并去掉外层引号,更推荐直接用JSON_VALUE函数,不需要额外做正则替换,性能和可读性都更好。
解决方案
方案1:修正单引号转义写法(如果确实需要替换内容里的单引号)
把REGEXP_REPLACE的第二个参数改为''''即可,修改后代码如下:
COUNTIF(REGEXP_REPLACE(JSON_EXTRACT(view_context, '$.exit_event'), '''', '') = 'TAP_RIGHT') AS is_view_ctx_tap_right, COUNTIF(REGEXP_REPLACE(JSON_EXTRACT(view_context, '$.exit_event'), '''', '') = 'TAP_LEFT') AS is_view_ctx_tap_left
方案2:用JSON_VALUE简化写法(更推荐)
直接用JSON_VALUE提取字符串值,会自动去掉JSON值外层的引号,不需要正则替换操作:
COUNTIF(JSON_VALUE(view_context, '$.exit_event') = 'TAP_RIGHT') AS is_view_ctx_tap_right, COUNTIF(JSON_VALUE(view_context, '$.exit_event') = 'TAP_LEFT') AS is_view_ctx_tap_left
内容的提问来源于stack exchange,提问作者mpollinger
相关产品推荐
相关产品推荐

