首页 > 技术, 数据库 > Mysql和正则

Mysql和正则

2011年4月4日 1,597 人浏览 发表评论 阅读评论

mysql里做字符串匹配时,大家都喜闻乐见的有like,如:
select 'abc' like '%b%';
本质上,用like就是字符串查找,mysql的字符串查找函数是locate或者instr
实践中,我们需要更强大的字符串匹配功能,如正则那样的。
mysql支持正则查找的,有个关键字,REGEXP,直接上例子:
select 'abc123def' regexp '[[:digit:]]+';
mysql的正则语法比较独特,上面的[:digit:]是数字字符类,就是测试 abc123def 是否包含数字。
regexp是关键字,还有用法not regexp,就是不符合正则。
你要记住的是,mysql支持正则查找,有自己的语法和关键字,关键字是REGEXP和NOT REGEXP。
关于正则的更多信息,见文档: http://dev.mysql.com/doc/refman/5.1/en/regexp.html http://dev.mysql.com/doc/refman/5.1/zh/regexp.html

有了这个正则武器,我们可以干很多事情了。
但是,等等,mysql只支持正则查找,不支持正则替换,比方说把类似 abc123def 里的数字提取出来,默认就没有好办法了。
好在mysql支持扩展,支持自定义函数,具体见: http://dev.mysql.com/doc/refman/5.1/zh/extending-mysql.html
于是有人做了这样的正则替换的自定义函数,具体见: http://www.mysqludf.org/lib_mysqludf_preg/index.php
udf是user defined function的缩写。
需要安装一下:
wget http://www.mysqludf.org/lib_mysqludf_preg/lib_mysqludf_preg-1.0.1.tar.gz
tar zxvf lib_mysqludf_preg-1.0.1.tar.gz
cd lib_mysqludf_preg-1.0.1
./configure

会报错,没有PCRE,PCRE是Perl Compatible Regular Expressions的缩写,就是perl语法的正则库
如果你是linux,可以尝试安装libpcre
我是mac用户,上 http://pcre.org/
下载源码
wget
tar
cd
./configure
make
sudo make install
make check

就把pcre装好了,然后回到lib_mysqludf_preg-1.0.1目录
./configure
make
sudo make install
make installdb
make test

不要忘了make installdb,就是在数据库里安装那个函数的定义,然后就ok了。make test是测试一下。
然后在sql里试试:
SELECT PREG_CAPTURE('/^.*?(\\d+).*?$/' , 'abc1234def' ,1);
它可以把 abc1234def里的1234提取出来。
当然可以做替换,见preg_replace函数
更多的语法见 http://www.mysqludf.org/lib_mysqludf_preg/index.php
perl的正则语法和php的应该一样。

分类: 技术, 数据库 标签: , ,
1 Star2 Stars3 Stars4 Stars5 Stars 来给这篇文章评分吧!
Loading ... Loading ...
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.