MySQL Regex Only显示匹配的部分

时间:2014-02-25 17:00:21

标签: mysql regex

我一直试图找到一种方法,使用MySQL的REGEXP函数只返回匹配行的一部分。

我在做: SELECT * FROM表WHERE文本REGEXP“[。] cat [。]”

文本本身很长(必须使用LONGTEXT字段才能使其适合表格)。所以我只想显示

我有没有办法让它只显示匹配的文字,而不是整个文字字段?

2 个答案:

答案 0 :(得分:1)

找到答案。使用MySQL UDF PREG。

https://github.com/mysqludf/lib_mysqludf_preg

我很难在我的redhat服务器上安装它。我按照以下步骤操作:

https://gist.github.com/kamermans/1658660(如果该页面消失,请执行以下步骤:)

yum -y install pcre-devel gcc make automake mysql-devel

此文件不可用。我只是用谷歌搜索文件名并在网上找到它。

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
make install
echo "You'll need to enter your MySQL password a few times to install the UDFs and test them"
mysql -u root-p < installdb.sql
make test

答案 1 :(得分:-1)

根据你的评论:

既然我明白了你需要做什么,答案是,这在MySQL中并不存在。 MySQL不是解析冗长文本文件的语言。您需要编写一个连接到MySQL的Perl脚本,或使用其他一些通用语言来进行解析。

所以答案是否定的。


没有办法显示匹配的文字,即使这没有意义。如果text列确实那么长,您不必在select查询中抓取它。

或者您可以执行MySQL substring function之类的操作,只获取前n个字符。

select substring(text, 0, 10) from table where text like '%cat%';

您无需在此处使用REGEXP功能。您可以使用like运算符,如上所示。