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

MaxCompute:RLIKE

最終更新日:May 15, 2025

RLIKE は、Perl Compatible Regular Expressions(PCRE)標準に基づいて MaxCompute SQL が提供する演算子です。 RLIKE 演算子を使用すると、MaxCompute SQL でより正確で複雑なパターンマッチングまたは置換を実行できます。 このトピックでは、RLIKE でサポートされているメタ文字、POSIX 文字グループ、中国語文字グループ、およびエスケープ文字について説明します。 また、関連文字の例も示します。

メタ文字

RLIKE 演算子はさまざまなメタ文字をサポートしています。 次の表に、RLIKE でサポートされている一般的に使用されるメタ文字を示します。

メタ文字

説明

^

文字列の先頭と一致します。

$

文字列の末尾と一致します。

.

任意の 1 文字と一致します。

*

直前の文字または文字パターンと 0 回以上一致します。

+

直前の文字または文字パターンと 1 回以上一致します。

?

  • 直前の文字または文字パターンと 0 回または 1 回一致します。

  • 一致修飾子として機能します。 この文字が他の制限文字 (*、+、?、{n}、{n,}、または {n,m}) の後に続く場合、一致パターンは非 greedy です。 非 greedy パターンは、検索対象の文字列内で可能な限り少ない文字と一致しますが、デフォルトの greedy パターンは、検索対象の文字列内で可能な限り多くの文字と一致します。

A|B

A または B と一致します。

(abc)*

abc シーケンスと 0 回以上一致します。

{n} or {m,n}

一致の数。 {n} は正確な一致数を表し、{m,n} は一致数の範囲を表します。

[ab]

角かっこ内の任意の文字と一致します。

[a-d]

次の文字のいずれかと一致します:a、b、c、および d。

[^ab]

^ は NOT を示します。 この式は、a または b でない任意の文字と一致します。

[::]

詳細については、このトピックで後述するPOSIX 文字グループを参照してください。

\

エスケープ文字。 詳細については、このトピックで後述するエスケープ文字の一致を参照してください。

\n

n は 1 から 9 の範囲の数字で、後方参照を示します。

\d

数字。

\D

数字以外の文字。

一般的なルールの一致

  • 文字列の先頭と末尾を一致させる

    -- 文字列 aa123bb の先頭が a かどうかを照合します。 true が返されます。
    SELECT 'aa123bb' RLIKE '^a';
    
    -- 文字列 aa123bb の先頭を a と、文字列 aa123bb の末尾を b と照合します。 true が返されます。
    SELECT 'aa123bb' RLIKE '^a.*b$';
    
    -- 文字列 footerbar に foo と bar が順番に含まれているかどうかを照合します。 true が返されます。
    SELECT 'footerbar' RLIKE 'foo(.*?)(bar)';
    
    -- 文字列 footerbar が foo で始まり、bar で終わるかどうかを照合します。 true が返されます。
    SELECT 'footerbar' RLIKE '^foo(.*?)(bar)$';
  • 任意の文字と一致させる

    -- 文字列 cc123bb の先頭が a から d までの任意の文字であるかどうかを照合します。 true が返されます。
    SELECT 'cc123bb' RLIKE '^[a-d]';
    
    -- 文字列 12abc34 が 12 で始まり、34 で終わり、途中に a から d までの文字が少なくとも 1 つ含まれているかどうかを照合します。 true が返されます。
    SELECT '12abc34' RLIKE '^12[a-d]+34$';

エスケープ文字の一致

RLIKE 演算子は、バックスラッシュ \ をエスケープ文字としてサポートしています。 したがって、正規表現のパターン内のすべての \ 文字は 2 回エスケープする必要があります。

  • 例 1

    正規表現は文字列 a+b と一致する必要があります。ここで、+ は正規表現の特殊文字です。 したがって、エスケープ文字として表現する必要があります。 正規表現エンジンでは、a\+b として表現されます。 もう 1 つのエスケープレイヤーが必要なので、この文字列と一致する式は a\\+b です。

    SELECT 'a+b' RLIKE 'a\\+b';
    
    --次の結果が返されます。
    +------+
    | _c1  |
    +------+
    | true |
    +------+
  • 例 2

    文字 \ と一致させるには、正規表現エンジン \ は特殊文字なので \\ として表現する必要があり、もう 1 つのエスケープレイヤーが必要なので \\\\ と記述されます。

    説明

    MaxCompute SQL では、a\\b と記述されますが、出力には a\b と表示されます。 これは、MaxCompute が式をエスケープするためです。

    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 |
    +-----+------+
  • 例 3

    文字列にタブ文字(TAB)が含まれている場合、システムはこれらの 2 つの文字を読み取るときに既に \t を 1 文字として格納しています。 したがって、正規表現のパターンでも正規文字です。

    SELECT 'a\tb', 'a\tb' RLIKE 'a\tb';
    
    -- 次の結果が返されます。
    +---------+------+
    | _c0     | _c1  |
    +---------+------+
    | a     b | true |
    +---------+------+
  • 例 4

    数字 \d、数字以外の文字 \D、および後方参照 \n を含む文字列と一致します。

    --文字列 2025maxcompute の先頭が数字であるかどうかを照合します。 true が返されます。
    SELECT '2025maxcompute' RLIKE '^\\\d';
    
    --文字列 maxcompute2025test の先頭が数字以外の文字であるかどうかを照合します。 true が返されます。
    SELECT 'maxcompute2025test' RLIKE '^\\\D';
    
    --文字列 alibaba-cloud-MC2025-test に MC と数字の組み合わせが含まれているかどうかを照合します。 true が返されます。
    SELECT 'alibaba-cloud-MC2025-test' RLIKE 'MC\\\d';
    
    -- 文字列 alibaba-cloud-MC2025-test に MC と 4 桁の数字の組み合わせが含まれているかどうかを照合します。 true が返されます。
    SELECT 'alibaba-cloud-MC2025-test' RLIKE 'MC\\\d{4}-';
    
    -- 文字列に abcdefdef が含まれているかどうかを照合します。 true が返されます。
    -- abc はキャプチャグループ 1、def はキャプチャグループ 2、\2 は 2 番目のキャプチャグループの繰り返し一致を表し、\\\2 として再度エスケープする必要があります。 つまり、abcdefdef です。
    SELECT 'mmabcdefdefgg' RLIKE '(abc)(def)\\\2';

文字グループ

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]

説明

MaxCompute は \f\v をサポートしていません。 サポートされているエスケープ文字の詳細については、エスケープ文字を参照してください。

中国語文字グループ

文字グループ

有効値

中国語文字などの 2 バイト文字

[^\\x{00}-\\x{ff}]

中国語文字

[\\x{4e00}-\\x{9fa5}]

中国語の句読点

中国語の句読点には統一されたエンコーディング範囲がありません。 検索エンジンで 中国語の句読点 Unicode を検索し、演算子を使用して 1 つずつ除外できます。

たとえば、ピリオド()の正規表現は [\\x{3002}] です。

SELECT * FROM VALUES ('Hello.'),('nihao!') t(d) WHERE d RLIKE '[\\x{3002}]';

-- 次の結果が返されます。
+------------+
| d          |
+------------+
| Hello.     |
+------------+
説明

一重引用符と一致させるには、unicode0027 を使用でき、対応する正規表現は [\\x{0027}] です。