mysql:9146
From: "HIROSE, Masaaki" <"HIROSE, Masaaki" <hirose31@xxxxxxxxxx>>
Date: Wed, 07 Apr 2004 15:35:41 +0900
Subject: [mysql 09146] Re: 正規表現
ひろせといいます on "[mysql 09134] 正規表現" <20040406.145101.67882373.fuji@xxxxxxxxxx> at Tue, 06 Apr 2004 14:51:01 +0900 (JST) Hirofumi Fujiwara <fuji@xxxxxxxxxx> wrote: > utf8で使用した場合の正規表現ですが、どうも1文字1バイトとしてしか評 > 価していないと思われる例です。参考のため、like では、1文字をちゃん > と認識しているようです。 > > 正規表現がちゃんと使えると便利なので、是非きちんと対応して欲しいと思っ > ております。 かなりやっつけですが、oniguruma <http://www.geocities.jp/kosako1/oniguruma/index.html> を使った UDF を 作ってみました。 create table j (s varchar(32)); insert into j values ('あいう'), ('かきく'), ('んあいうん'), ('イあ'); なデータに対して、default-character-set = utf8 な mysqld だと select s 'regexp あ.う' from j where s regexp 'あ.う'; Empty set select s 'mregexp あ.う' from j where mregexp(s,'あ.う'); あいう んあいうん となり、default-character-set = ujis な mysqld だと上記に加え、 select s 'regexp い' from j where s regexp 'い'; あいう んあいうん イあ select s 'mregexp い' from j where mregexp(s,'い'); あいう んあいうん となり文字の境界もちゃんと処理してくれます。 一応、 Linux 2.4.25 mysql 4.1.1-alpha-Max-log (default-character-set=utf8) oniguruma-2.2.1 Linux 2.6.5 mysql 4.0.18-log (default-character-set=ujis) oniguruma-2.2.6 で動作確認しました。 // 使い方は、添付の mregexp.c を gcc -I/usr/include/mysql -DENCODING=ONIG_ENCODING_UTF8 -shared -o mregexp.so mregexp.c -lonig として mregexp.so を作ります。 コンパイルには oniguruma が必要なので、事前にインストールして、適宜 -I を追加してください。 ENCODING は mysqld の default-character-set に合わせてください。ujisな ら ONIG_ENCODING_EUC_JP 、sjis なら ONIG_ENCODING_SJIS です。 # SQL発行時にも指定できます。 できた mregexp.so を適当な場所、例えば /usr/local/lib/mysql/mregexp.so にコピーし、 LD_LIBRARY_PATH=/usr/local/lib/mysql を設定して mysqld_safe を起動しま す。 例えば、/etc/init.d/mysql で /usr/bin/mysqld_safe となっている個所を env LD_LIBRARY_PATH=/usr/irori/lib/mysql /usr/bin/mysqld_safe に変更します。 mysqld 再起動後、以下の SQL を発行して UDF を定義します。 CREATE FUNCTION mregexp RETURNS INTEGER SONAME "mregexp.so"; これで mregexp が使えるようになりました。 mregexp の使い方は、 mregexp("文字列", "正規表現" [, "エンコーディング"]) です。エンコーディングは今のところ以下のものしか指定できません。 ASCII UTF-8 EUC-JP SJIS 省略時はコンパイル時に -DENCODING で指定したエンコーディングになります。 // かなりやっつけなので使用する際は気をつけてください。そのうちもう少し弄 るかもしれません。 ではでは -- ひろせ http://www.irori.org/
9134 2004-04-06 14:51 [Hirofumi Fujiwara <f] 正規表現 9137 2004-04-06 20:17 ┣[Hirofumi Fujiwara <f] -> @ 9146 2004-04-07 15:35 ┗["HIROSE, Masaaki" <h] 9149 2004-04-07 19:52 ┣[joe <free-zep@xxxxxx] 9151 2004-04-08 10:28 ┃┗[MURAKAMI Tomokazu <t] 9203 2004-04-13 17:09 ┗["HIROSE, Masaaki" <h] mregexp-0.2 (Re: 正規表現) @ 9205 2004-04-13 20:23 ┗[Kazuhiro Yoshida <mo] 9206 2004-04-13 20:34 ┗[Kazuhiro Yoshida <mo]