🦉
BigQueryの正規表現で大文字・小文字を区別せずに文字列を検索
結論
REGEXP_CONTAINS(text, r"(?i)hoge")
理由
BigQueryはre2を正規表現エンジンとして使っているから。
参照: BigQuery String Functions
Note: GoogleSQL provides regular expression support using the re2 library; see that documentation for its regular expression syntax.
モチベーション
- 表題をBigQueryのワークフローやクエリで実現する
- Perl互換の正規表現で書かれた正規表現をBigQueryに書き直す
なお、Perl互換正規表現(Perl Compatible Regular Expressions, PCRE)では以下のような表現になる。
/hoge/i
テスト
テストコードを記述し、実際の挙動を確認。
テストコード
WITH
test_cases AS (
SELECT "hello" AS text, TRUE AS expected UNION ALL
SELECT "world", TRUE UNION ALL
SELECT "Hello", TRUE UNION ALL
SELECT "WORLD", TRUE UNION ALL
SELECT "hello i am shunsock!!", TRUE UNION ALL
SELECT "the world will be better", TRUE UNION ALL
SELECT "Nothing to match here", FALSE
),
results AS (
SELECT
text,
expected,
REGEXP_CONTAINS(text, r"(?i)hello|world") AS actual
FROM
test_cases
)
SELECT
text,
expected,
actual,
CASE
WHEN expected = actual THEN "Test Passed"
ELSE "Test Failed"
END AS test_result
FROM
results
テスト結果
参照先
re2の文法
文法がまとまっているGitHubのページ。基本はこのページを参照すればよい。
re2について
re2そのものについてはREADME参照。色々な言語のwrapperが存在する。
Discussion