-->

2013-05-14

memo: lib_mysqludf_preg

参考URL。
https://github.com/mysqludf/lib_mysqludf_preg/branches

mysqlでperl互換の正規表現を使う場合のメモ。

gentooのパッケージの場合のインストール。
$ sudo ACCEPT_KEYWORDS="~*" emerge --oneshot -avt dev-db/lib_mysqludf_preg

設置されたファイルなどの確認。
$ qlist lib_mysqludf_preg

マニュアルなどの確認。
$ lv /usr/share/doc/lib_mysqludf_preg-1.0.1/README.bz2
$ w3m /usr/share/doc/lib_mysqludf_preg-1.0.1/html/index.html
$ lv /usr/share/doc/lib_mysqludf_preg-1.0.1/installdb.sql.bz2

関数のインストール。
$ bzcat /usr/share/doc/lib_mysqludf_preg-1.0.1/uninstalldb.sql.bz2 | mysql -uroot -p
$ bzcat /usr/share/doc/lib_mysqludf_preg-1.0.1/installdb.sql.bz2 | mysql -uroot -p

テスト。文字の置換。REPLACEなどで代用できるのであれば必要無し。
mysql> SELECT PREG_REPLACE( '/fox/i' , 'dog' , 'The brown fox' );
+----------------------------------------------------+
| PREG_REPLACE( '/fox/i' , 'dog' , 'The brown fox' ) |
+----------------------------------------------------+
| The brown dog                                      |
+----------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT REPLACE('The brown fox', 'fox', 'dog');
+----------------------------------------+
| REPLACE('The brown fox', 'fox', 'dog') |
+----------------------------------------+
| The brown dog                          |
+----------------------------------------+
1 row in set (0.00 sec)

テスト。文字のマッチ。LIKE,REGEXPなどで代用できるのであれば必要無し。
mysql> SELECT PREG_RLIKE('/java/i' , 'abc javascript 123.');
+-----------------------------------------------+
| PREG_RLIKE('/java/i' , 'abc javascript 123.') |
+-----------------------------------------------+
|                                             1 |
+-----------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT PREG_RLIKE('/java(?!script)/i' , 'abc javascript 123.');
+---------------------------------------------------------+
| PREG_RLIKE('/java(?!script)/i' , 'abc javascript 123.') |
+---------------------------------------------------------+
|                                                       0 |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT 'abc javascript 123.' LIKE '%java%';
+-------------------------------------+
| 'abc javascript 123.' LIKE '%java%' |
+-------------------------------------+
|                                   1 |
+-------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT 'abc javascript 123.' REGEXP 'java';
+-------------------------------------+
| 'abc javascript 123.' REGEXP 'java' |
+-------------------------------------+
|                                   1 |
+-------------------------------------+
1 row in set (0.00 sec)

バージョン。配布サイトの1.0の最新はdev-1.0.2だった。
mysql> SELECT LIB_MYSQLUDF_PREG_INFO();
+--------------------------+
| LIB_MYSQLUDF_PREG_INFO() |
+--------------------------+
| lib_mysqludf_preg 1.0.1  |
+--------------------------+
1 row in set (0.00 sec)

pcreであれば簡単に書けるのに、という処理が無い、とか、
DB => プログラムへ絞り込みの途中の文字列を全部持ってきてOK、とか、
絞り込んだ後の結果を使ってSQLを発行しない、とか、
であれば、全然必要無い。