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 |