Chinaunix首页 | 论坛 | 博客
  • 博客访问: 671493
  • 博文数量: 96
  • 博客积分: 2005
  • 博客等级: 上尉
  • 技术积分: 1061
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-21 13:59
文章分类

全部博文(96)

文章存档

2013年(11)

2012年(30)

2011年(55)

分类: Mysql/postgreSQL

2011-12-08 19:57:07

SQL的查询语句中,有时会需要引进正则表达式为其复杂搜索指定模式。下面给出一些Regexp在MYSQL语句中应用(非全部): 

1) ^ 
匹配字符串的开始部分。 
mysql> SELECT \'fonfo\' REGEXP \'^fo$\'; -> 0mysql> SELECT \'fofo\' REGEXP \'^fo\'; -> 12) $ 
匹配字符串的结束部分。 

mysql> SELECT \'fono\' REGEXP \'^fono$\'; -> 1mysql> SELECT \'fono\' REGEXP \'^fo$\'; -> 03) . 

匹配任何字符(包括回车和新行)。 

mysql> SELECT \'fofo\' REGEXP \'^f.*$\'; -> 1mysql> SELECT \'fornfo\' REGEXP \'^f.*$\'; -> 14) [:character_class:] 

在括号表达式中(使用[和]),[:character_class:]表示与术语类的所有字符匹配的字符类。标准的类名称是: 

alnum 
文字数字字符 

alpha 
文字字符 

blank 
空白字符 

cntrl 
控制字符 

digit 
数字字符 

graph 
图形字符 

lower 
小写文字字符 

print 
图形或空格字符 

punct 
标点字符 

space 
空格、制表符、新行、和回车 

upper 
大写文字字符 

xdigit 
十六进制数字字符 

它们代表在ctype(3)手册页面中定义的字符类。特定地区可能会提供其他类名。字符类不得用作范围的端点。 

mysql> SELECT \'justalnums\' REGEXP \'[[:alnum:]]+\'; -> 1 

mysql> SELECT \'!!\' REGEXP \'[[:alnum:]]+\'; -> 0 

5) [[:<:]], [[:>:]] 

这些标记表示word边界。它们分别与word的开始和结束匹配。word是一系列字字符,其前面和后面均没有字字符。字字符是alnum类中的字母数字字符或下划线(_)。 

mysql> SELECT \'a word a\' REGEXP \'[[:<:]]word[[:>:]]\'; -> 1mysql> SELECT \'a xword a\' REGEXP \'[[:<:]]word[[:>:]]\'; -> 0要想在正则表达式中使用特殊字符的文字实例,应在其前面加上2个反斜杠“”字符。MySQL解析程序负责解释其中一个,正则表达式库负责解释另一个。例如,要想与包含特殊字符“+”的字符串“1+2”匹配,在下面的正则表达式中,只有最后一个是正确的: 

mysql> SELECT \'1+2\' REGEXP \'1+2\'; -> 0mysql> SELECT \'1+2\' REGEXP \'1+2\'; -> 0mysql> SELECT \'1+2\' REGEXP \'1\\+2\'; -> 1 其他的有关Regexp的语法,可直接参考下表:字符 含意 
做为转意,即通常在""后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/b/,转意为匹配一个单词的边界。 
-或- 
对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了""后,/a*/将只匹配"a*"。 

^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a" 
$ 匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A" 
* 匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa 
+ 匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa 
? 匹配前面元字符0次或1次,/ba*/将匹配b,ba 
(x) 匹配x保存x在名为$1...$9的变量中 
x|y 匹配x或y 
{n} 精确匹配n次 
{n,} 匹配n次以上 
{n,m} 匹配n-m次 
[xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符) 
[^xyz] 不匹配这个集合中的任何一个字符 
[b] 匹配一个退格符
b 匹配一个单词的边界 B 匹配一个单词的非边界 cX 这儿,X是一个控制符,/cM/匹配Ctrl-M d 匹配一个字数字符,/d/ = /[0-9]/ D 匹配一个非字数字符,/D/ = /[^0-9]/ n 匹配一个换行符 r 匹配一个回车符 s 匹配一个

b 匹配一个单词的边界 
B 匹配一个单词的非边界 
cX 这儿,X是一个控制符,/cM/匹配Ctrl-M 
d 匹配一个字数字符,/d/ = /[0-9]/ 
D 匹配一个非字数字符,/D/ = /[^0-9]/ 
n 匹配一个换行符 
r 匹配一个回车符 
s 匹配一个空白字符,包括n,r,f,t,v等 
S 匹配一个非空白字符,等于/[^nfrtv]/ 
t 匹配一个制表符 
v 匹配一个重直制表符 
w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[w]匹配"$5.98"中的5,等于[a-zA-Z0-9] 
W 匹配一个不可以组成单词的字符,如[W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]。
阅读(8241) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~