RLIKEは、Perl互換正規表現 (PCRE) 標準に基づいてMaxCompute SQLによって提供される演算子です。 RLIKE演算子を使用すると、MaxCompute SQLでより正確で複雑なパターンマッチングまたは置換を実行できます。 このトピックでは、RLIKE、POSIX文字グループ、漢字グループ、およびエスケープ文字でサポートされているメタ文字について説明します。 このトピックでは、関連する文字の例も示します。
Metacharacter
RLIKEオペレータはさまざまなmetacharactersを支えます。 次の表に、RLIKEでサポートされる一般的に使用されるメタキャラクターを示します。
Metacharacter | 説明 |
^ | 文字列の先頭と一致します。 |
¥ | 文字列の末尾と一致します。 |
. | 任意の単一の文字と一致します。 |
* | 前の文字または文字パターンと0回以上一致します。 |
+ | 前の文字または文字パターンと1回以上一致します。 |
? | 前の文字または文字パターンと0または1回一致します。 |
? | 修飾子と一致します。 この文字が他の文字 (* 、+ 、? 、{n} 、{n、} 、または {n、m}) のいずれかに続く場合、一致パターンは非貪欲です。 非貪欲アルゴリズムでは、文字列はできるだけ少ない文字と一致する。 欲張りアルゴリズムでは、文字列はできるだけ多くの文字と一致する。 デフォルトでは、greedyアルゴリズムが使用されます。 |
A | B | AまたはBに一致します。 |
(abc)* | abcシーケンスを0回以上照合します。 |
{n} または {m,n} | 一致の数。 |
[ab] | 角括弧内の任意の文字と一致。 ファジーマッチが使用される。 |
[a-d] | a、b、c、dのいずれかの文字と一致します。 |
[^ab] | 括弧内の文字以外の文字と一致します。 |
[::] | 詳細については、「POSIX文字グループ」をご参照ください。 |
\ | エスケープ文字。 詳細については、「エスケープ文字」をご参照ください。 |
\n | nは1から9までの数字であり、バックリファレンスを示します。 |
\d | 数字。 |
\D | 数字以外の文字。 |
正規表現の詳細については、pcre2syntax man pageをご覧ください。
一致する結果が期待に合わない場合は、エスケープ文字が必要になる場合があります。 詳細については、「エスケープ文字」をご参照ください。
例
例1: 文字列の先頭と末尾を一致させます。
select 'aa123bb' rlike '^a'; -- Match the beginning of the string aa123bb with a. true is returned. select 'aa123bb' rlike '^a.*b$'; -- Match the beginning of the string aa123bb with a and the end of the string aa123bb with b. true is returned. select 'footerbar' rlike 'foo(.*?)(bar)'; -- true is returned.
例2: エスケープ文字を使用して、特殊文字を持つ文字列を照合します。
select 'a+b' rlike 'a\\\+b'; -- true is returned.
例3: 任意の単一の文字を一致させる。
select 'cc123bb' rlike '^[a-d]'; -- Match the beginning of the string cc123bb with one of the characters from a to d. true is returned.
例4: 任意の数字と任意の数字以外の文字を一致させる。
select '123bb' rlike '^\\\d'; -- Match the beginning of the string 123bb with any digit. true is returned. select 'cc123bb' rlike '^\\\D'; -- Match the beginning of the string cc123bb with any non-digit character. true is returned.
文字グループ
POSIX文字グループ
文字グループ | 説明 | 有効値 |
[[:alnum:]] | 文字と数字 | [a-zA-Z0-9-]* |
[[:alpha:]] | Letters | [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] |
MaxComputeは、\f
および \v
のエスケープ文字をサポートしていません。 MaxComputeでサポートされているエスケープ文字の詳細については、「エスケープ文字」をご参照ください。
漢字グループ
文字グループ | 有効値 |
漢字などのダブルバイト文字 | [^\\ x{00}-\x{ff}] |
漢字 | [\x{4e00}-\x{9fa5}] |
中国の句読点 | 中国の句読点には、統一されたUnicode範囲はありません。 検索エンジンを使用してUnicode of a Chinese句読点を検索し、演算子を使用して中国の句読点に一致させることができます。 たとえば、中国語のピリオド (。) は 説明 中国語の単一引用符 (') を一致させたい場合は、 |
エスケープ文字
RLIKEでは、バックスラッシュ (\
) をエスケープ文字として使用できます。 したがって、正規表現のバックスラッシュ (\
) もエスケープする必要があります。
例
例 1
正規表現を使用して
a + b
の文字列に一致させます。 式のプラス記号 (+
) は式の特殊文字であり、エスケープする必要があります。 正規表現エンジンでは、文字列はa\\+ b
として表されます。 式は再びエスケープする必要があります。 したがって、文字列に一致する式はa \\\ + b
です。select 'a+b' rlike 'a\\\+b'; +------+ | _c1 | +------+ | true | +------+
例 2
バックスラッシュ
(\)
の文字と一致します。 特定の場合、バックスラッシュ(\)
文字は正規表現エンジンでは特殊文字であり、エンジンでは\\
として表す必要があります。 次に、式を再びエスケープする必要があります。 その結果、バックスラッシュ (\) 文字は\\\\
と表されます。select 'a\\b', 'a\\b' rlike 'a\\\b'; +-----+------+ | _c0 | _c1 | +-----+------+ | a\b | false | +-----+------+ select 'a\\b', 'a\\b' rlike 'a\\\\b'; +-----+------+ | _c0 | _c1 | +-----+------+ | a\b | true | +-----+------+
説明MaxCompute SQL文に
a\\b
が含まれている場合、MaxComputeは式をエスケープするため、a\b
を返します。例 3
タブ文字を一致させます。 文字列にタブ文字が含まれている場合、MaxComputeはこの式を読み取るときに
\t
を1文字として格納します。 したがって、\tは正規表現では共通の文字です。select 'a\tb', 'a\tb' rlike 'a\tb'; +---------+------+ | _c0 | _c1 | +---------+------+ | a b | true | +---------+------+