本文共 1729 字,大约阅读时间需要 5 分钟。
在SQL中,你可以使用regexp
函数来匹配数据库中的字段值。在基本字符匹配中,regexp
接受一个模式字符串,匹配字段中的字符。
select columns from table where columns regexp '字符';select columns from table where columns regexp '字符|字符';
为了匹配多个字符中的任意一个,可以使用|
符号将要匹配的字符用[
和]
括起来。
select name from products where name regexp '[123] tom ';
这个模式会匹配1、2或3 tom的字符。括号内的匹配范围可以是[1-9]、[a-z]、[A-Z]等。
select name from products where name regexp '[1-5] tom ';
该模式匹配1到5之间的任意一位数字再跟随" tom"。
在regexp
中,以下特殊字符需要注意:
.
:匹配任意字符,除了换行符[]
:匹配空白字符,\]
用于匹配闭区间,[
用于开区间|
:作为或的逻辑符号使用,默认是匹配任意字符_
:在某些正则表达式中,下划线默认匹配任意字符select name from products where name regexp '\\[0-9\\] sticks?';
这一行代码首先匹配任意数字,然后匹配sticks?
。因为?
表示零个或一个"s"
,因此"sticks"
或"sticks "
都能被匹配。
在regexp
中,以下空白元字符需要特别处理:
\f
:换页符\n
:换行符\r
:回车符\t
:制表符\v
:纵向制表符\"
),需要使用\\
表示regexp
中提供了多种字符类,用方括号指定:
[:alnum:]
:任意字母和数字[:alpha:]
:任意字母(大小写)[:blank:]
:空格或制表符[:cntrl:]
:ASCII控制字符(0-31和127)[:digit:]
:任意数字[:graph:]
:与[:print:]
相同,但不包括空格[:lower:]
:任意小写字母[:print:]
:任意可打印字符[:punct:]
:既不在[:alnum:]
又不在[:cntrl:]
中的任意字符[:space:]
:包括空格在内的任意字符[:upper:]
:任意大写字母[:xdigit:]
:任意十六进制数字(0-9和a-f/A-F)select name from products where name regexp '[[:digit:]] {4}';
这个模式会匹配[:digit:]
(任意数字)连续出现4次的字符串。
重复元字符用于控制匹配次数:
*
:0个或多个匹配+
:1个或多个匹配?
:0个或1个匹配{n}
:指定n个匹配{n,}
:不少于n个匹配{n,m}
:匹配n到m个之间的字符select name from product where name regexp '[0-9] sticks?';
这里,[0-9]
匹配任意数字,sticks?
匹配sticks
或sticks
。
定位元字符用来指定匹配的位置:
^
:文本的开始$
:文本的结尾[[:<:] Broi)
:词的开始[[:>:] Broi)
:词的结尾select name from product where name regexp '^[0-9\\.]';
这里,^只在文本开始时才匹配,而不仅仅是任意位置。
regexp
与like
在模式应用上存在差异:
like
匹配整个字段,而regexp
默认匹配子串。^
和$
可以使regexp
的作用与like
类似。select name from product where name regexp '\\[0-9\\] sticks?';
在这个例子中,^[0-9\\.]
意味着匹配从文本开始并以数字或者小数结尾的字符串。
转载地址:http://fzbyk.baihongyu.com/