求助学长mysql正则表达式问题

46 views
Skip to first unread message

WIND GARWEN

unread,
Feb 1, 2014, 12:06:42 PM2/1/14
to beihang-open...@googlegroups.com
用mysql做查询的时候想筛选出只包含英文字符和数字的字段,但是用正则表达式的“*”好像没有重复字符的作用,查询结果如下:内嵌图片 1
查询结果中还是会有中文字符等各种诡异的字符,不知道是我的查询语句有问题还是什么?在网上也找不到是什么原因,只能求教各位学长了。。。
2014-02-02 00:54:11的屏幕截图.png

Zuyang Kou

unread,
Feb 1, 2014, 12:11:56 PM2/1/14
to BHOSC
大概是 unicode 的问题吧,查下文档,看怎么搞


2014-02-02 WIND GARWEN <windre...@gmail.com>
用mysql做查询的时候想筛选出只包含英文字符和数字的字段,但是用正则表达式的“*”好像没有重复字符的作用,查询结果如下:内嵌图片 1
查询结果中还是会有中文字符等各种诡异的字符,不知道是我的查询语句有问题还是什么?在网上也找不到是什么原因,只能求教各位学长了。。。

--
-- Beihang Open Source Club
beihang-open...@googlegroups.com
https://groups.google.com/d/forum/beihang-open-source-club
---
您收到此邮件是因为您订阅了 Google 网上论坛的“北航开源俱乐部”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 beihang-open-sourc...@googlegroups.com
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。



--
Code is poetry.
2014-02-02 00:54:11的屏幕截图.png

Yousong Zhou

unread,
Feb 1, 2014, 7:33:17 PM2/1/14
to beihang-open...@googlegroups.com
猜一下,可能是星号asterisk的问题。匹配零个或多个,因此全中文字段也匹配到了。


On Sunday, 2 February 2014, WIND GARWEN wrote:
用mysql做查询的时候想筛选出只包含英文字符和数字的字段,但是用正则表达式的“*”好像没有重复字符的作用,查询结果如下:内嵌图片 1
查询结果中还是会有中文字符等各种诡异的字符,不知道是我的查询语句有问题还是什么?在网上也找不到是什么原因,只能求教各位学长了。。。

--
2014-02-02 00:54:11的屏幕截图.png

Qingwen Guan

unread,
Feb 1, 2014, 9:12:37 PM2/1/14
to beihang-open...@googlegroups.com

好神奇,毕竟无论如何中文的ASCII码高位是1. 我觉得需要确定下mysql的正则语法。我记得正则表达式有好几套语法。

2014-02-02 00:54:11的屏幕截图.png

Yousong Zhou

unread,
Feb 1, 2014, 9:37:51 PM2/1/14
to beihang-open...@googlegroups.com
只是想起python里边有match,search的差别。mysql的样例里可以看到

mysql> SELECT 'fo\nfo' REGEXP '^fo$';                   -> 0 
mysql> SELECT 'fofo' REGEXP '^fo';                      -> 1
2014-02-02 00:54:11的屏幕截图.png

duyue

unread,
Feb 1, 2014, 10:17:39 PM2/1/14
to 北航开源软件俱乐部
*可以匹配零个, 把*换成+。 前后加上^和$, 不然有字母数字就会匹配。

不建议使用mysql的regex,用不上索引。

WIND GARWEN

unread,
Feb 1, 2014, 10:50:18 PM2/1/14
to beihang-open...@googlegroups.com
学长说的“用不上索引”是指什么?


在 2014年2月2日 上午11:17,duyue <lyx...@gmail.com>写道:
*可以匹配零个, 把*换成+。 前后加上^和$, 不然有字母数字就会匹配。

不建议使用mysql的regex,用不上索引。

--
Message has been deleted

WIND GARWEN

unread,
Feb 2, 2014, 8:36:10 AM2/2/14
to beihang-open...@googlegroups.com
恩恩,后来我按照杜越学长说的改了之后就可以了,改过之后的就跟学长写的这个一样,只是没看太懂为什么杜越学长会说“不建议使用mysql的regex,用不上索引”?


在 2014年2月2日 下午9:06,Rui Dai <drst...@gmail.com>写道:

目测匹配规则是  '^[0-9a-zA-Z]+$'  (单引号双引号都OK)

如果你不设定起始和结束  正则会匹配【包含】该规则而不是【完全等于】该规则的列值
而*代表大于等于0  也就是你匹配了全部的列  
当然会包含中文等你不想看见的东东- -

所以应该用+  代表至少有一次  
并且要指定起始^和结束位置$


祝好
码年快乐^_^



 
mail from Starry^ ^ 
Message has been deleted

Xuan Hu

unread,
Feb 2, 2014, 8:44:42 AM2/2/14
to beihang-open...@googlegroups.com
大概意思就是查询的时候有索引会快,相反如果没有索引会很慢,而正则不能利用已有的索引,很容易成为性能瓶颈,也就是所谓用不上索引(怎么感觉什么都没说一样…)
Sent from Gmail Mobile

WIND GARWEN

unread,
Feb 2, 2014, 9:10:10 AM2/2/14
to beihang-open...@googlegroups.com
 没什么啊,还是要谢谢学长啦!!!


在 2014年2月2日 下午9:43,Rui Dai <drst...@gmail.com>写道:
不好意思啊不好意思
邮件都没展开  没看别人回复就回答了。。。
给大家发垃圾邮件了T_T
好丢人  匿了匿了

WIND GARWEN

unread,
Feb 2, 2014, 9:11:41 AM2/2/14
to beihang-open...@googlegroups.com
但是如果不用正则的话好像就只能用mysql的like做匹配,学长的意思是用后面这种方法做查询的时候会用到索引速度会更快吗?

Xuan (Sean) Hu

unread,
Feb 2, 2014, 9:17:10 AM2/2/14
to beihang-open...@googlegroups.com
只有在 Like [queryword]% 时索引才是有效的,不然都是全表查找 


2014-02-02 WIND GARWEN <windre...@gmail.com>:



--
扈煊 Xuan (Sean) Hu

北京大学信息科学技术学院2012级硕士研究生
2012, Master Degree Candidate, EECS, Peking Univ.

WIND GARWEN

unread,
Feb 2, 2014, 9:18:55 AM2/2/14
to beihang-open...@googlegroups.com
恩恩,懂了,谢谢学长啦!!

WIND GARWEN

unread,
Feb 2, 2014, 9:19:21 AM2/2/14
to beihang-open...@googlegroups.com
感谢楼上各位学长的热心解答!!
Reply all
Reply to author
Forward
0 new messages