ScarShow

< IS >

讓 SQLite 支援 REGEXP 語法

2012-09-20  /  IT  /  Note PHP Python

在使用 MySQL 的時候 REGEXP 正規表示式查詢好用又強大,雖然 SQLite 官方說有支援但其實意思是要使用者寫函式去擴充 SQLite。

因為最近寫 PHP, Python 都有用到 SQLite 所以就順便做一下使用筆記。

在 SQLite 建立連線之後,就要對他做擴充的動作,程式碼如下。

Python

import sqlite3
import re

def regexp(self, pattern, subject):
    reg = re.compile(pattern)
    return reg.search(subject) is not None

conn = sqlite3.connect('/path/to/db.sqlite3')
conn.create_function('REGEXP', 2, regexp)

conn.execute('DELETE FROM table REGEXP "\m"')

conn.close()

PHP

<?php

function regexp($pattern, $subject) {
    return preg_match("/{$pattern}/", $subject);
}

$conn = new PDO('sqlite:/path/to/db.sqlite3');
$conn->sqliteCreateFunction('REGEXP', regexp, 2);

$conn->query('DELECT FROM table REGEXP "\m"');