すべてのプロダクト
Search
ドキュメントセンター

:正規表現

最終更新日:Aug 16, 2023

MaxCompute SQL の正規表現では、文字で照合する PCRE 標準が採用されます。 サポート対象のメタ文字は、次のとおりです。
メタ文字 説明
^ 行の先頭 (TOL)
$ 行末
. 任意の文字
* 0 回または複数回の一致
+ 1 回または複数回の一致
? 0 回または 1 回の一致
? 量指定子が一致します。 この文字が他の制約 (*、+、?、{n}、{n, {n, m}} に従っている場合、 非貪欲モードでの照合になります。 非貪欲モードでは、一致する文字列が可能な限り少なくなります。デフォルトの貪欲モードでは、可能な限り多くの文字列が一致するようになります。
A | B A または B
(abc)* 'abc' と 0 回または複数回の一致
{n} or {m, n} 複数回の一致
[ab] 角括弧内の任意の文字と一致。 この例では、a または b と一致します。
[a-d] a、b、c、d の中の任意の文字と一致します。
[^ab] ^ は、'以外' を示し、a 、b 以外の任意の文字と一致します。
[::] 次の表の POSIX 文字グループをご参照ください。
\ エスケープ文字
\n N は 1 から 9 までの数字で、後方参照されています。
\d 数字
\ D 非数字
POSIX 文字グループは、次のとおりです。
POSIX 文字グループ 説明 範囲
[[:alnum:]] 文字と数字 [a-zA-Z0-9-]*
[[:alpha:]] 文字 [a-zA-Z]
[[:ascii:]] ASCII 文字 [\x00-\x7F]
[[:blank:]] スペース文字とタブ [ \t]
[[:cntrl:]] 制御文字 [\x00-\x1F\x7F]
[[:digit:]] 数字 [0-9]
[[:graph:]] 空白文字以外の文字 [\x21-\x7E]
[[:lower:]] 小文字 [a-z]
[[:print:]] [:graph:] と空白文字 [\x20-\x7E]
[[:punct:]] 句読点 [][!” [][!”#$%&’()*+,./:;<=>? @\^_`{|}~-]
[[:space:]] 空白文字 [ \t\r\n\v\f]
[[:upper:]] 大文字 [A-Z]
[[:xdigit:]] 16 進文字 [A-Fa-f0-9]

システムではエスケープ文字としてバックスラッシュが使用されるので、正規表現パターンに現れるすべての "\" は 2 つのエスケープを実行します。 たとえば、正規表現で文字列 "a + b" と照合する必要があるとします。 "+" は正規表現では特殊文字なので、エスケープして表す必要があります。 システムはエスケープのレイヤーを説明する必要があるため、通常のエンジンでの表現は "a\+b" です。この文字列と一致する表現は "a\\+b" です。

次のようなテーブル test_dual があるとします。
select 'a+b' rlike 'a\\\+b' from test_dual;

| _c1 |

| true |
"\" は通常のエンジンでは特殊文字なので、極端な場合、文字 "\" と一致させるには、"\" で表す必要があり、システムでは再度エスケープを実行するので、" \\" と記述されます。
select 'a\\b', 'a\\b' rlike 'a\\\\b' from test_dual;

| _c0 | _c1 |

| a\b | true |
説明 MaxCompute SQL で a\\b と記述すると、出力結果はa\bになります。
TAB が文字列内に存在する場合、システムでこの 2 つの文字 \tが読み取られると、1 文字として保存されます。 したがって、正規表現では一般文字になります。
select 'a\tb', 'a\tb' rlike 'a\tb' from test_dual;| _c0 | _c1 |

| a b | true |