在BigQuery中正则表达式的前后环视功能并不完善,无法直接使用,但我们可以通过使用分组捕获来达到类似的效果。下面是一个例子,假设我们想要匹配包含'A”和'B”,且它们之间没有出现过'C”的字符串。
首先,我们可以使用正则表达式匹配到所有包含'A”和'B”的字符串:
SELECT REGEXP_EXTRACT("ABCDE", r'^(?=.*A)(?=.*B).*$')
-- Output: "ABCDE"
接下来,我们再添加一个分组捕获,通过在正则表达式中加入'()”来实现。我们'C”放入分组捕获中,并在正则表达式中使用反向引用(\1)来表示分组捕获中的内容:
SELECT REGEXP_EXTRACT("ABCDEF", r'^(?=.*A)(?!.*C)(?=.*B)(.*)$') AS output
-- Output: "AB"
SELECT REGEXP_EXTRACT("ACBEDF", r'^(?=.*A)(?!.*C)(?=.*B)(.*)$') AS output
-- Output: null
SELECT REGEXP_EXTRACT("ABDCDEF", r'^(?=.*A)(?!.*C)(?=.*B)(.*)$') AS output
-- Output: null
上述例子中,'(?!.C)”表示负向前后环视,即匹配不包含'C”的字符串,'(.)”中的'.*”表示匹配任意字符。