mregexp - MySQLܸɽ򰷤

: Date: 2006/09/29 09:21:22  UTC (Revision: 1.10 )
: 2004/04/13



ܼ


  mregexpȤ
      Ū
      ǽ
      REGEXP
      饤
      mregexpε񤭤ޤ
  ܤȤ
      ʸˡ
      
      
  
  󥹥ȡˡ
      ɬפʤ
      󥹥ȡ
  ǽˤĤ
      Ū
      Ķ
      
      ͻ
  ѹ
      mregexp
      Υڡ

mregexpȤ


Ū


ΤȤ(mysql 4.0.27, 5.0.24a)MySQLΥͥƥִؿREGEXPܸʸ
Ǥޤ (LIKESUBSTRINGʤɤܸνбƤ
)ܸ򤭤ȰɽؿmregexpȤΤ桼
ؿ(UDF=User Defined Function)ȤȤߤѤƺޤ

ǽ


  mregexpϡREGEXPƱ褦ˡWHEREǥ쥳ɤо˻ȤȤǤ
    ޤ

REGEXP


REGEXPܸʤɤΥޥХʸθƤʤᡢʲΤ褦꤬
ޤ

  ѥ'.'ʸ''˥ޥåޤ
    ɽΡ.פǤդ1ʸǤϤʤǤդ1ХȤ˥ޥåƤޤ
    Ǥ

     LIKEϴ̤֤פޥå뤬
    mysql> SELECT * FROM regexp_test WHERE s LIKE '_';
      +--------+
      |  |
      | X  |
      +--------+

     REGEXPǤϡ֤פޥåʤ
    mysql> SELECT * FROM regexp_test WHERE s REGEXP '.';
      +-------+
      | X |
      +-------+

     mregexpLIKEƱ褦˴Ԥ̤˥ޥåޤ
    mysql> SELECT * FROM regexp_test WHERE mregexp(s, '.');
      +--------+
      |  |
      | X  |
      +--------+

  EUC-JPξ硢ѥ''ʸ''˥ޥåƤޤ
    ϡ֤פΥɥݥȤ0xA4A4ǡ֥פΤ0xA5A4A4A2Ǥ뤿
    븽ݤǤ

            
      
    A5  A4  A4  A2
        
          

     LIKEȡ֥פϥޥåʤ
    mysql> SELECT * FROM regexp_test WHERE s LIKE '%%';
      +--------+
      | s      |
      +--------+
      |  |
      +--------+

     REGEXPȡ֤פޤޤʤ֥פޥåƤޤ
    mysql> SELECT * FROM regexp_test WHERE s REGEXP '';
      +--------+
      | s      |
      +--------+
      |  |
      |    |
      +--------+

     mregexpLIKEƱ褦˴Ԥ̤˥ޥåޤ
    mysql> SELECT * FROM regexp_test WHERE mregexp(s, '');
      +--------+
      |  |
      +--------+


mregexpɽνˤϵ(Oniguruma)ѤƤޤ Onigurumaܸ
ʸ󥳡ǥ󥰤ǤEUC-JP, Shift_JIS, UTF-8Ϥᡢ͡ʸ
ǥ󥰤бƤ뤿ᡢmregexpȤФΤ褦ϵޤ

饤


饤󥹤ϽBSD饤󥹤Ǥ饤󥹾¤ꡢ/ѡ
/ץ󥽡˴ؤ餺ۡѤ뤳ȤǤޤܺ٤ʥ饤
ʪ˴ޤޤեCOPYING򻲾ȤƤͤޤǤˡFreeBSD
ProjectΥȤ˽BSD饤󥹤ܸޤ

mregexpε񤭤ޤ


Ķˤ!MySQL
Ķˤ!MySQL
posted with amazlet on 06.09.29
û¼ɧҤޤ
Ʊ˼
2006-10-04ȯ
Amazon.co.jp Ǿܺ٤򸫤

Ʊ˼ҤΥåĶˤ!MySQL٤UDFξϤˡmregexpε񤭤ޤ
REGEXPmregexp˻äаޡmregexp.cξʤɤʤ
񤭤ޤΤǡˤȤäƸƤ館ФȻפޤ

ܤȤ


ʸˡ


mregexp(expr,pat[,encoding])

ʸexprФơɽpatΥѥޥå¹ԤޤǥեȤǤʸ
ʸ̤ƥѥޥå¹Ԥޤ

mregexpؿͤϡѥ˥ޥå1ޥåʤä0ˤʤ
ޤ

encodingǤϡexprpatʸ󥳡ǥ󥰤ꤷޤ
encodingȤƻǤΤϰʲ̤ǡʸʸ̤ޤ
Ĥޤꡢ'euc-jp''Euc-Jp'ȤƱͤǤ
ޤencodingϾάǽǡΤȤϥѥDEFAULT_ENCODINGǻꤷ
Τˤʤޤ

  Shift_JIS, sjis, cp932
  EUC-JP, ujis, eucjpms

  UTF-8, utf8
  UTF-16BE
  UTF-16LE
  UTF-32BE
  UTF-32LE

  ASCII
  ISO-8859-1, latin1
  ISO-8859-2, latin2
  ISO-8859-3
  ISO-8859-4
  ISO-8859-5
  ISO-8859-6
  ISO-8859-7, greek
  ISO-8859-8, hebrew
  ISO-8859-9, latin5
  ISO-8859-10
  ISO-8859-11
  ISO-8859-13, latin7
  ISO-8859-14
  ISO-8859-15
  ISO-8859-16

  EUC-TW
  EUC-KR, euckr
  EUC-CN
  KOI8-R, koi8r
  Big5
  GB18030

⤦ġ mregexpΥСmregexpؿencodingν͡OnigurumaΥС
ޤʸ֤ؿmregexp_versionޤ

mregexp_version()

mysql> select mregexp_version();
mregexp-1.0 [EUC-JP] (oniguruma-4.4.4)




ʲ˻򼨤ޤѤǤɽξܺ٤ϡ Oniguruma ɽ򻲾Ȥ
Ƥ mregexpǻѤƤɽμRuby(= ONIG_SYNTAX_DEFAULT =
ONIG_SYNTAX_RUBY)Ǥ

s1EUC-JPȤƥѥޥå¹Ԥޤ
    SELECT * FROM table_name WHERE mregexp(s1, '^', 'ujis');
֤פǻϤޤ֤פǽ륫Фޤ
    SELECT * FROM table_name WHERE mregexp(s1, '^.*$');
֤פ⤷ϡ֤פޤ५Фޤ
    SELECT * FROM table_name WHERE mregexp(s1, '(|)');
֤פ֤פǻϤޤ륫Фޤ
    SELECT * FROM table_name WHERE mregexp(s1, '^[]');
ޤ५Фޤ
    SELECT * FROM table_name WHERE mregexp(s1, '\\d');
    \dǤϤʤ\\dǤդƤ
ʸʸ̤ơabcפޤ५Фޤ
    SELECT * FROM table_name WHERE mregexp(s1, 'abc');
    SELECT * FROM table_name WHERE mregexp(s1, '(?-i)abc');
ʸʸ̤ʤǡabcפޤ५Фޤ
    SELECT * FROM table_name WHERE mregexp(s1, '(?i)abc');




  ηCHARξ硢ͤϢ³ڡ(0x20)̵뤷ƥ
    ޥå󥰤ԤޤĤޤꡢCHAR(5)'abcd '(˥ڡ1
    )ϡѥ'd$'˥ޥåޤ'd $''d\\s$'ˤϥޥåޤ
    ͳϼ̤Ǥ
    UDFϤVARCHARʸϤκĹˤʤ褦˥ڡͤ
    Ƥ뤿ᡢĹCHARǥڡͤƤΤȶ̤Ǥޤ
    ǤǡCHARĹȤƻȤVARCHARȤ٤⤤ȽǤ
    Τ褦ʼˤޤ
  ɽOnigurumaRuby(ONIG_SYNTAX_RUBY)Ǥ
  MySQL 4.1.1Ǥϡؿ(mregexp_init)ǥ顼ȯmysqldƵư
    ƤޤޤmysqldΥХ(Bug #2697)ǡ4.1.2ǽޤ




name version  date size

󥹥ȡˡ


ɬפʤ


  MySQLΡȯѥե (libmysqlȥإåե롣rpmǤMySQL-devel
    ޤޤƤޤ)
    MySQLΥСϡ4.04.15.0ưǧ򤷤Ƥޤ
  Oniguruma 4.X

󥹥ȡ


ʹߤǤUNIX likeʴĶǤΥ󥹥ȡˡ򼨤ޤ

WindowsξϡVC++ǤΥ󥹥ȡˡMySQL ML [mysql 09205] <http://
www.mysql.gr.jp/mysqlml/mysql/msg/9205>  [mysql 09206] <http://
www.mysql.gr.jp/mysqlml/mysql/msg/9206> Ȥ𤵤ƤΤǤ򻲾Ȥ
ޤVC2005 ExpressȤäΥѥˡĶˤ!
MySQL*٤˾Ҳ𤵤ƤΤǤ⻲ͤˤʤȻפޤ

Makefile INSTALL_LIBDIRDEFAULT_ENCODINGͤŬѹƤ
INSTALL_LIBDIRUDFΥ֥ȥե֤ǥ쥯ȥ (ʲǻ
ꤷǥ쥯ȥINSTALL_LIBDIRɽޤ) Ǥ
DEFAULT_ENCODINGǻꤷΤϡ mregexpؿμ¹Իˡmregexpΰʸ
󥳡ǥ󥰤ꤵʤäνͤȤʤޤmy.cnf[mysqld]
default-character-setƱʸ󥳡ǥ󥰤ˤȤǤ礦

MakefileˤShift_JIS, EUC-JP, UTF8㤬ޤʳʸ󥳡ǥ
(EUC-KRʤ)򤳤ǻꤷϡ OnigurumaAPIˤ
ONIG_ENCODING_XXXꤷƤ

Makefileѹ顢ѥ뤷rootˤʤäƥ󥹥ȡ뤷ޤ

$ make
# make install

ĶѿLD_LIBRARY_PATHINSTALL_LIBDIRꤷmysqldưľޤ
MySQL AB󶡤rpmѥåȤäƤϡmysqldεưץ/etc/
init.d/mysqlʲΤ褦ѹƤ/etc/init.d/mysql restartȼ¹ԤƵư
ľФǤ

--- /etc/init.d/mysql   2004/04/12 08:40:57     1.1
+++ /etc/init.d/mysql   2004/04/12 08:47:27
@@ -151,6 +151,7 @@
     then
       # Give extra arguments to mysqld with the my.cnf file. This script may
       # be overwritten at next upgrade.
+      env LD_LIBRARY_PATH=/usr/local/lib/mysql \
       $bindir/mysqld_safe --datadir=$datadir --pid-file=$pid_file >/dev/null 2>&1 &
       # Make lock for RedHat / SuSE
       if test -w /var/lock/subsys

mysqldư顢mysqlΥ桼root³ʲSQLʸȯԤޤ

CREATE FUNCTION mregexp RETURNS INTEGER SONAME 'mregexp.so';
CREATE FUNCTION mregexp_version RETURNS STRING SONAME 'mregexp.so';

ʾmregexpؿȤ褦ˤʤäȻפޤ

ɬܤǤϤޤ󤬡Τ褦ˤưǧԤȤǤޤ

MySQL 4.0 Ϥdefault-character-set = ujisξ
    make test_ujis
MySQL 4.0 Ϥdefault-character-set = sjisξ
    make test_sjis
MySQL 4.1 ϡ5.0Ϥξ
    make test41

ưǧΤˡǥեȤǤmysql -s testǥǡ١test³ DROP
TABLE, CREATE TABLE, INSERT, SELECTȯԤޤ³桼ʤɤѹ
ϡmake¹ԻT_DOSQLͤꤹ뤳ȤǤޤ
㤨С桼scottѥtigerǡ١emp³ưǧ
ϡ make T_DOSQL='mysql -s -uscott -ptiger emp' test_ujis ȼ¹Ԥޤ

ǽˤĤ


Ū


Ȥ߹ߤREGEXPLIKE١mregexpɤ٤ǽȤʤ뤫Ĵ٤Ƥߤޤ
Ūˡǽɾ񤷤ϡɥmysqldΥѥ᡼ʤɤ礭
ޤǤŪɾǤϤʤĶǤmregexpη򸫤
ȤȤޤ

Ķ


ϡɥ
      Intel Celeron 2.00GHz
       512MB
եȥ
      Linux, kernel-2.6.5, glibc-2.2.5
      MySQL-4.0.18-log
      Oniguruma-2.2.6
      gcc-2.95.4

ơ֥ϰʲΤ褦ñʤΤǤ

CREATE TABLE `t_perm` (
  `c1` varchar(12) default NULL,
  KEY `idx_c1` (`c1`)
) TYPE=InnoDB

ǡ177,409ԳǼƤޤͤޤǤˡΥǡĶʸˤǸ
볩ζǷΡʸŪʡ;ʸŪʡ١١١ϩ١
º٤MeCab ()ǻϤ̤ʸǤ




ƥȤϰʲ̤Ǥ

 1. select * from t_perm where c1 like '%';
 2. select * from t_perm where c1 regexp '^';
 3. select * from t_perm where mregexp(c1,'^');
 4. select * from t_perm where mregexp(c1,'^.');
 5. select * from t_perm where c1 like '%' and mregexp(c1,'^.');

꤬λޤǤפ֤ϰʲ̤Ǥ 1ܤmysqldưƽ
ȯԤǡ2ܤ1ܤ³ƱȯԤǤ

ֹ 1[sec] 2[sec]
1          0.09       0.06
2          0.84       0.06
3          1.09       0.86
4          1.07       1.01
5          0.06       0.06

ФΥФEXPLAIN¹Ԥ̤Τtypepossible_keysrowsΤ
ȴФΤϰʲ̤ˤʤޤ

ֹ type  possible_keys  rows
1          range idx_c1        10459
2          index NULL          176937
3          index NULL          176937
4          index NULL          176937
5          range idx_c1        10450

ͻ


ޤ3EXPLAINη̤򸫤ȡmregexpǤפɽǤäƤ⥤
ǥåȤƤʤȤ狼ޤǤREGEXPϤɤȤȡ2
EXPLAINη̤̤ꡢȤȤ߹ߴؿפɽǤäƤ⥤ǥ
ϻѤޤ
231ܤ2ܤν׻֤򸫤ȡ2Ǥ2ܤν׻
ûʤäƤΤ狼ޤϥΥå夬Ƥ뤿
ǡmysqldquery_cache_sizeü˾ƻƤߤȡ2ܤǤ1
ܤƱ٤ν׻֤ˤʤäȤ΢դޤ3Ǥϡ2
¿׻֤ûʤäƤޤ2ۤʤΤǤϤޤ󡣿¬
ˡUDFȤäη̤ϥå夵ʤΤǤϤʤǤ礦
ο¬ȡUDFǤmregexpפǤäƤ⥤ǥåȤ
̤Υå⤵ʤȤˤʤꡢǽ˰ȤȤˤʤäƤ
ޤޤ

mregexpǽ쥳ɿ򾯤ʤ뤳Ȥˤäơ׻֤ˤɤΤ褦
Ѳ뤫Ƥߤޤ줬45Ǥ
5LIKEmregexpȤäƤΤǥ4٤ƥȤ⤤褦˸ޤ
׻֤٤ƤߤȰŪټ֤Υ5®Ȥ̤ˤʤ
ϡޤǽLIKEŬѤ졢4٤mregexp쥳
ɤ˾ʤʤäȻפޤޤξǤLIKEǤϥǥå
ŬѤΤLIKEνû֤Ǵλޤ

ʾꡢmregexpLIKEREGEXP٤ǽ̤ǤޤLIKEmregexp
Ȥ߹碌ƻȤȤǹ⤤ǽ뤳Ȥ狼ޤ
ɽȤƤζ̤LIKEȤ߹碌櫓ǤϤޤ󤬡
Υ塼˥󥰤κݤˤϤΤ褦ʥθ٤Ȼפޤ

ѹ


mregexp


2006-09-29
    version 1.0꡼
    Ķˤ!MySQL*٤˴ƤΤ򵡤ˡΤľ㴳ľ
    ơMySQL 5.0ưǧ򤷤ޤ
2004-08-25
    version 0.3꡼
    args->lengths[i]ǤϤʤstrlen(args->args[i])ȤäƤΤ
    (Thanks to Yuzo Kimpara)
2004-04-13
    version 0.2꡼
2004-04-07
    ܤMySQL ML˽Ǥơ

Υڡ


2006-09-29
    Ū˽ľޤ
2004-08-25
    ȯĶξ򹹿
2004-04-18
    Windows(VC++)ǤΥ󥹥ȡˡؤΥ󥯤ɲá
2004-04-13
    


Id: mregexp.html,v 1.10 2006/09/29 09:21:22 hirose31 Exp 

Ҥޤ (HIROSE, Masaaki) <hirose31@irori.org>
()

