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

正規表現の(*)と。*の違いは何ですか?

    Oracle 11では、* および+ パターン(前に何もない)は、幅がゼロの一致を生成します。したがって、(*) および(+) グループをキャプチャしています() ゼロ幅パターンを含む* または+ それぞれ。

    これらのクエリはすべて行を返します:

    SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '*' );
    SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '(*)' );
    SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '^*' );
    SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '^(*)' );
    SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '*1' );
    SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '+' );
    SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '(+)' );
    SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '^+' );
    SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '^(+)' );
    SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '+1' );
    SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '^+1' );
    SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '+1$' );
    SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '^+1$' );
    SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '()' );
    SELECT * FROM DUAL WHERE REGEXP_LIKE( '12', '1(*)2' );
    SELECT * FROM DUAL WHERE REGEXP_LIKE( '12', '1(+)2' );
    

    これらのクエリは行を返しません:

    SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '*2' );
    SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '^*$' );
    SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', '^+$' );
    SELECT * FROM DUAL WHERE REGEXP_LIKE( '12', '11(*)2' );
    SELECT * FROM DUAL WHERE REGEXP_LIKE( '12', '11(+)2' );
    

    また、任意のパターンをNULLと照合します またはNULLに対する文字列 パターンは行を返しません:

    SELECT * FROM DUAL WHERE REGEXP_LIKE( NULL, '*' );
    SELECT * FROM DUAL WHERE REGEXP_LIKE( '1', NULL );
    

    REGEXP_SUBSTRの使用 :

    SELECT REGEXP_SUBSTR( '1', '+' ) FROM DUAL;
    

    NULLを含む単一の行を出力します 。



    1. Postgres:1回の選択で最小値、最大値、集計値を取得

    2. 1.22にアップグレードしようとしたときにMediaWikiDB接続エラーが発生しました

    3. mysql.serverの開始時にPIDエラーが発生しましたか?

    4. Oracleで数値サブタイプ(smallint、intなど)を検索します