SQLite の正規表現演算子

Bilal Shahid 2023年6月21日
  1. 正規表現とは
  2. Regex を SQLite にインストールする方法
  3. SQLite のクエリで Regex を使用する
  4. SQLite のコマンド ラインから正規表現を使用する
  5. SQLite での Regex の代替
SQLite の正規表現演算子

関数を使用すると、SQLite がはるかに簡単になり、データ処理がはるかに高速になる傾向があります。 これを拡張したのが regex 演算子です。これは、クエリを短縮し、ユーザーがデータをより高速に処理できるようにすることで、より良いユーザー エクスペリエンスを提供するためによく使用されます。

正規表現とは

Regex は、ユーザーが正規表現を参照したい場合に使用する句です。 その主な目的は、ユーザー定義関数を呼び出してデータベースにロードし、regex 句の後に追加された追加タスクを実行することです。

関数は、ユーザーが必要とするあらゆるアクティビティを実行できます。 ただし、regex を使用する前に、関数を定義してロードする必要があることに注意することが重要です。

これを事前に行わないと、regex 句を使用するとエラー メッセージが表示されます。 これは、デフォルトでリンクされる機能がないためです。

したがって、これを効果的に使用するには、アプリケーションで関数を作成し、SQLite ドライバーへのコールバック リンクを提供する必要があります。

Regex を SQLite にインストールする方法

ほとんどの場合、SQLite の regex はパッケージに付属しています。 一部の SQLite ディストリビューションまたは GUI ツールで使用できますが、すべての場合ではありません。

そのため、インストールする必要がある可能性が高くなります。 これを行う方法についての段階的なチュートリアルを次に示します。

  1. 端末に次のコードを記述します。

    sudo apt-get install sqlite3-pcre
    
  2. これで、Perl 正規表現がロード可能なファイルにインストールされました。 /usr/lib/sqlite3/pcre.so にあります。

  3. 使用するには、次を使用してロードする必要があります。

    .load /usr/lib/sqlite3/pcre.so
    

これで、SQLite で regex 句を簡単に使用できるようになりました。 ファイルを適切に使用するには、毎回ファイルをロードする必要があることに注意してください。

これを回避する方法は、~/.sqliterc に行を追加することです。 このように、SQLite を開くたびに行が自動的に実行されます。

SQLite のクエリで Regex を使用する

SQLite で regex を使用するには、まず関数を作成する必要があることがわかったので、簡単な関数を作成しましょう。 関数の名前は 'regexp' である必要があることに注意することが重要です。これは、regex 関数が使用する関数を識別するのに役立ちます。

関数の内容を変更するか、上書きして新しい関数を作成することにより、いつでも関数を変更できます。 以下に例を示します。

sqlite_create_function ( 'regexp', 0, sub {return time} );

この関数は現在の時刻を返します。 これをテーブルに追加するには、単純なコード行を使用して挿入できます。

INSERT INTO table_name (regexp());

関数が作成されたので、regex クエリを使用する準備が整いました。 正しく使用することを忘れないでください。 最後に 'P' を追加する必要があります。

したがって、式には WHERE x REGEXP <regex> のようなものが含まれます。

上記で作成した関数で演算子を使用してみましょう。 以下のコードを使用して、正しく実行してください。

SELECT * from table_name
WHERE column_name REGEXP '\bA\w+'

このコードでは、単語が文字 'A' で始まるテーブル内のすべてのコンテンツを表示できます。

'A' で始まる値を表示する別の例を次に示しますが、今回は大文字と小文字が区別されます。

SELECT * from table_name
WHERE column_name REGEXP '(?i:\bA\w+)'

注: 関数を作成するための構文は、使用している言語によって異なる場合があります。

SQLite のコマンド ラインから正規表現を使用する

コマンド ラインで作業する場合、~/.sqliterc の内容によっては、regex コマンドを実行するためにファイルをロードする必要がある場合があります。 代わりに、事前に関数を作成している限り、いつでもコマンドラインから直接 regex を使用できます。

構文は同じままですが、-cmd スイッチを使用してコードを記述する前に、ライブラリをロードする必要があります。 SQLite 3 で動作する例を次に示します。

sqlite3 "$file_name" -cmd
".load /usr/lib/sqlite3/pcre.so"
"SELECT fld FROM table_name
WHERE fld REGEXP '\b3\b';"

このようにして、別の SQLite アプリケーションを開かなくても、システムのコマンド ラインから直接クエリを実行できます。

SQLite での Regex の代替

別の例を取り上げて、数値 3 を含むテーブル内のすべての値を提供するクエリを作成するとします。 regex 演算子を使用してこれを行っていた場合、次のように行うことができます。

SELECT * FROM table_name
WHERE x REGEXP '(^|,)(3)(,|$)'

別の方法を次に示します。

SELECT fld FROM table_name
WHERE fld REGEXP '\b3\b';

どちらの場合も、実行前に適切な関数が既に作成されていると想定しています。

REGEX を使用せずにこれを別の方法で行う必要があるとします。 その場合、以下のような比較的複雑なクエリを常に使用できます。

SELECT * FROM table_name
WHERE ',' || x || ',' LIKE '%,3,%'

どちらの方法でも問題なく機能しますが、より多くのロジック構築が必要なクエリを処理する場合は、regex 演算子を選択することをお勧めします。

これは、大量のメモリを消費する非常に長く複雑なクエリになる可能性があり、すべての場合に問題を解決できない可能性があるためです。 regex 演算子はあいまいさを取り除き、そのクエリに割り当てられるメモリを減らします。

regex 演算子について知っておくべきことは以上です。 オペレーターを簡単に使用できるように、提供された情報が役立つことを願っています。

著者: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub