sql正则表达式常用符号

sql正则表达式常用符号,第1张

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

MYSQL语句中应用(非全部):

1) ^

匹配字符串的开始部分。

mysql>SELECT 'fo\nfo' REGEXP '^fo$'->0mysql>SELECT 'fofo' REGEXP '^fo'->12) $

匹配字符串的结束部分。

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

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

mysql>SELECT 'fofo' REGEXP '^f.*$'->1mysql>SELECT 'fo\r\nfo' 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 匹配一个空白字符,包括\n,\r,\f,\t,\v等

\S 匹配一个非空白字符,等于/[^\n\f\r\t\v]/

\t 匹配一个制表符

\v 匹配一个重直制表符

\w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[\w]匹配

"$5.98"中的5,等于[a-zA-Z0-9]

\W 匹配一个不可以组成单词的字符,如[\W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]。

属性名 regexp ‘匹配方式'

正则表达式的模式字符

^ 匹配字符开始的部分

eg1: 从info表name字段中查询以L开头的记录

select * from info where name regexp '^L'

eg2: 从info表name字段中查询以aaa开头的记录

select * from info where name regexp '^aaa'

$ 匹配字符结束的部分

eg1: 从info表name字段中查询以c结尾的记录

select * from info where name regexp 'c$'

eg2: 从info表name字段中查询以aaa结尾的记录

select * from info where name regexp 'aaa$'

. 匹配字符串中的任意一个字符,包括回车和换行

eg1: 从info表name字段中查询以L开头y结尾中间有两个任意字符的记录

select * from info where name regexp '^L..y$'

[字符集合]匹配字符集合中的任意字符

eg1: 从info表name字段中查询包含c、e、o三个字母中任意一个的记录

select * from info where name regexp '[ceo]'

eg2: 从info表name字段中查询包含数字的记录

select * from info where name regexp '[0-9]'

eg3: 从info表name字段中查询包含数字或a、b、c三个字母中任意一个的记录

select * from info where name regexp '[0-9a-c]'

[^字符集合]匹配除了字符集合外的任意字符

eg1: 从info表name字段中查询包含a-w字母和数字以外字符的记录

select * from info where name regexp '[^a-w0-9]'

s1|s2|s3 匹配s1s2s3中的任意一个

eg1: 从info表name字段中查询包含'ic'的记录

select * from info where name regexp 'ic'

eg2: 从info表name字段中查询包含ic、uc、ab三个字符串中任意一个的记录

select * from info where name regexp 'ic|uc|ab'

* 代表多个该字符前的字符,包括0个或1个

eg1: 从info表name字段中查询c之前出现过a的记录

select * from info where name regexp 'a*c'

+ 代表多个该字符前的字符,包括1个

eg1: 从info表name字段中查询c之前出现过a的记录

select * from info where name regexp 'a+c'(注意比较结果!)

字符串{N} 字符串出现N次

eg1: 从info表name字段中查询出现过a3次的记录

select * from info where name regexp 'a{3}'

字符串{M,N}字符串最少出现M次,最多出现N次

eg1: 从info表name字段中查询ab出现最少1次最多3次的记录

select * from info where name regexp 'ab{1,3}'

MYSQL中自带通配符(LIKE关键词)

%可以表示任意长度的字符(包括0)

-可以表示单个字符

应该是[[:alnum:]]而不是[:anum:]

不过这个[:alnum:]不等价于[a-zA-Z0-9] 

而是说匹配Alphanumeric characters 除标点符号外有实际意义的字符(你可以试试汉字,这个符合的)都应该符合,查英文Wikipedia


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7430158.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-05
下一篇 2023-04-05

发表评论

登录后才能评论

评论列表(0条)

保存