日期:2014-05-16  浏览次数:20743 次

MySQL正则表达式问题
这些是我在mysql5.1参考手册上看到的,一些不理解的东西....  
mysql>   SELECT   'fo\nfo '   REGEXP   '^fo$ ';   ->   0  
mysql>   SELECT   'fofo '   REGEXP   '^fo ';   ->   1  

1:   ^符号代表什么意思....//^表示否定   是不是表示看fofo是不是不是以fo开头的字符串   那照着这个意思那上面第二条   不是应该为0   为什么是1呢...  
2:   后面紧跟的$代表什么意思....  


mysql>   SELECT   'abcde '   REGEXP   'a[bcd]{2}e ';   ->   0  
mysql>   SELECT   'abcde '   REGEXP   'a[bcd]{3}e ';   ->   1  
1:   [abc]和[abc]*的区别   //[abc]*   我知道是代表0个或者多个abc  
组成的字符串..  
2:   我对上面的例子稍微做了改动SELECT   'abcde '   REGEXP   'a[bcd]{2,}e '  
--> 1   //   我有点晕了a{2}和a{2,}的区别....  

帮助文档上面也说了a{n}与a的n个实例准确匹配。a{n,}匹配a的n个或更多实例。a{m,n}匹配a的m~n个实例,包含m和n。  
照着上面说a{n}与a的n个实例准确比配.   问题又来了   那上面的mysql>   SELECT   'abcde '   REGEXP   'a[bcd]{2}e ';   ->   0  
mysql>   SELECT   'abcde '   REGEXP   'a[bcd]{3}e ';   ->   1  

为什么又会出现不同的结果呢...//  
还有个问题...当我做如下改动的时候..SELECT   'abcde '   REGEXP   '[bcd]{2}e ';   --->   1   如果是以A{2}为例   'a[bcde]{2} '和 '[bcde]{2} '这两个中是  
a[bcde]代表A还是[bcde]代表A呢.....  

我是刚刚接触正则表达式   //代表我的一些理解....有什么不对的地方请指正一下....

------解决方案--------------------
^是开头,$是结尾。

^fo$是要匹配整个字符串就是fo,所以第一个为0;
^fo匹配以fo开头的字符串,所以第二个为1;

[bcd]{2}可以匹配任意两个字符,只要是b,c,d的组合,所以没有办法匹配上bcd
[bcd]{3}可以匹配任意三个字符,只要是b,c,d的组合,所以匹配上bcd
[bcd]{2,}可以匹配任意两个或更多字符,只要是b,c,d的组合,所以匹配上bcd
{m,n}只约束前一个模式。