sql >> データベース >  >> RDS >> Mysql

MySQLでのREGEX_REPLACE()関数のしくみ

    MySQLでは、 REGEXP_REPLACE() 関数は、指定された正規表現パターンに一致する文字列内の部分文字列の出現を置き換えます。

    文字列全体が置換とともに返されます。

    一致するものがない場合(つまり、入力文字列にサブ文字列が含まれていない場合)、文字列全体が変更されずに返されます。

    構文

    構文は次のようになります:

    REGEXP_REPLACE(expr, pat, repl[, pos[, occurrence[, match_type]]])

    expr 入力文字列であり、 pat 部分文字列の正規表現パターンです。 repl 引数は置換文字列です。

    オプションのpos 引数を使用すると、文字列内の位置を指定して検索を開始できます。省略した場合、位置1から始まります。

    オプションのoccurrence 引数を使用すると、検索する一致のオカレンスを指定できます。省略した場合、すべてのオカレンスが置き換えられます。

    オプションのmatch_type 引数は、マッチングの実行方法を指定する文字列です。これにより、正規表現を改良できます。たとえば、この引数を使用して、大文字と小文字を区別する一致を指定するかどうかを指定できます。

    例1-基本的な使用法

    基本的な例は次のとおりです。

    SET @str = 'It was good';
    SELECT 
      @str 'Original String',
      REGEXP_REPLACE(@str, 'good', 'great!') 'Result';

    結果:

    +-----------------+---------------+
    | Original String | Result        |
    +-----------------+---------------+
    | It was good     | It was great! |
    +-----------------+---------------+
    

    この場合、一致があり、文字列は変更とともに返されます。

    例2–複数の一致

    デフォルトでは、文字列内に複数の一致がある場合、それらすべてが置き換えられます:

    SET @str = 'Cat Dog Cat Dog Cat';
    SELECT 
      @str 'Original String',
      REGEXP_REPLACE(@str, 'Cat', 'Tiger') 'Result';
    

    結果:

    +---------------------+---------------------------+
    | Original String     | Result                    |
    +---------------------+---------------------------+
    | Cat Dog Cat Dog Cat | Tiger Dog Tiger Dog Tiger |
    +---------------------+---------------------------+
    

    ただし、置き換えるオカレンスを指定するオプションもあります(これについては後で詳しく説明します)。

    例3–一致なし

    一致するものがない例を次に示します。

    SET @str = 'Cat Dog Cat Dog Cat';
    SELECT 
      @str 'Original String',
      REGEXP_REPLACE(@str, 'Cow', 'Tiger') 'Result';
    

    結果:

    +---------------------+---------------------+
    | Original String     | Result              |
    +---------------------+---------------------+
    | Cat Dog Cat Dog Cat | Cat Dog Cat Dog Cat |
    +---------------------+---------------------+
    

    一致するものがないため、文字列は変更されずに返されます。

    例4– pos 引数

    開始位置を指定する例を次に示します。

    SET @str = 'Cat Dog Cat Dog Cat';
    SELECT 
      @str 'Original String',
      REGEXP_REPLACE(@str, 'Cat', 'Tiger', 2) 'Result';
    

    結果:

    +---------------------+-------------------------+
    | Original String     | Result                  |
    +---------------------+-------------------------+
    | Cat Dog Cat Dog Cat | Cat Dog Tiger Dog Tiger |
    +---------------------+-------------------------+
    

    最初のオカレンスの開始後の位置2から開始したため、置換操作は最初のオカレンスの後に続くオカレンスにのみ影響します。

    例5–発生 引数

    前述のように、デフォルトでは、すべてのオカレンスが置き換えられます。ただし、occurrence を使用して、置き換える特定のオカレンスを指定するオプションもあります。 口論。次に例を示します:

    SET @str = 'Cat Dog Cat Dog Cat';
    SELECT 
      @str 'Original String',
      REGEXP_REPLACE(@str, 'Cat', 'Tiger', 1, 2) 'Result';
    

    結果:

    +---------------------+-----------------------+
    | Original String     | Result                |
    +---------------------+-----------------------+
    | Cat Dog Cat Dog Cat | Cat Dog Tiger Dog Cat |
    +---------------------+-----------------------+
    

    この場合、位置1から開始します。ただし、別の位置から開始すると、結果は異なります。

    SET @str = 'Cat Dog Cat Dog Cat';
    SELECT 
      @str 'Original String',
      REGEXP_REPLACE(@str, 'Cat', 'Tiger', 2, 2) 'Result';
    

    結果:

    +---------------------+-----------------------+
    | Original String     | Result                |
    +---------------------+-----------------------+
    | Cat Dog Cat Dog Cat | Cat Dog Cat Dog Tiger |
    +---------------------+-----------------------+
    

    これは、最初の発生が開始された後に開始位置が来たために発生しました。したがって、オカレンス2はオカレンス1になり、オカレンス3はオカレンス2になります。

    オカレンス引数のデフォルト値は0です。 、これはすべてのオカレンスが置き換えられることを意味します。つまり、この引数を省略すると、すべてのオカレンスが置き換えられます(前の例で見たように)。すべてのオカレンスを明示的に指定する例を次に示します。

    SET @str = 'Cat Dog Cat Dog Cat';
    SELECT 
      @str 'Original String',
      REGEXP_REPLACE(@str, 'Cat', 'Tiger', 1, 0) 'Result';
    

    結果:

    +---------------------+---------------------------+
    | Original String     | Result                    |
    +---------------------+---------------------------+
    | Cat Dog Cat Dog Cat | Tiger Dog Tiger Dog Tiger |
    +---------------------+---------------------------+
    

    例6– match_type 引数

    一致タイプを決定するための追加の引数を指定できます。これにより、一致で大文字と小文字が区別されるかどうか、行末記号を含めるかどうかなどを指定できます。

    大文字と小文字を区別する一致と大文字と小文字を区別しない一致を指定する例を次に示します。

    SET @str = 'Cat Dog Cat Dog Cat';
    SELECT 
      @str 'Original String',
      REGEXP_REPLACE(@str, 'cat', 'Tiger', 1, 0, 'c') 'Case-Sensitive',
      REGEXP_REPLACE(@str, 'cat', 'Tiger', 1, 0, 'i') 'Case-Insensitive';
    

    結果:

    +---------------------+---------------------+---------------------------+
    | Original String     | Case-Sensitive      | Case-Insensitive          |
    +---------------------+---------------------+---------------------------+
    | Cat Dog Cat Dog Cat | Cat Dog Cat Dog Cat | Tiger Dog Tiger Dog Tiger |
    +---------------------+---------------------+---------------------------+
    

    match_type 引数には次の文字を含めることができます:

    c
    大文字と小文字を区別するマッチング。
    i
    大文字と小文字を区別しないマッチング。
    m
    複数行モード。文字列内の行末記号を認識します。デフォルトの動作では、文字列式の最初と最後でのみ行末記号が一致します。
    n
    文字はラインターミネータと一致します。デフォルトはです。 行の終わりで停止するためのマッチング。
    u
    Unixのみの行末。 で終わる行として認識されるのは、改行文字のみです。 、 ^ 、および $ 一致演算子。

    1. SQLServerストアドプロシージャからのAPIの呼び出し

    2. 2つの日付列から日付範囲を生成する

    3. SQLデータベーステーブルのポリモーフィズム?

    4. Bがうまくいかない場合は、Aをロールバックします。スプリングブーツ、jdbctemplate