一、使用MySQL正则表达式
1、1基本字符匹配(REGEXP后面的东西作为正则表达式处理)
select DeviceNO,DeviceName from device where LocationX REGEXP '1198' order by LocationX;
1.2使用正则表达式.0。表示匹配任意一个字符
select DeviceNO,DeviceName from device where LocationX REGEXP '.0' order by LocationX;
1.3若使用.00返回空值(位数没有00的数,如100,500等)
1.4 LIKE与REGEXP区别:
like匹配整个列。若被匹配的文本在列值中出现,like将不会找到它,相对应的行也不会返回(除非使用通配符)。而REGEXP在列值内进行匹配,若匹配的文本在列值中出现,REGEXP将会找到它,将返回相对应的行。
1.5 匹配特殊字符
为了匹配特殊字符,必须使用\为前导,\-表示查找-,\.表示查找.
查找.
select DeviceNO,DeviceName from device where LocationX REGEXP '\\.' order by LocationX;
\也可以引用元字符(具有特殊含义的字符)
\f --换页;\n–换行;\r–回车;\t–制表;\v–纵向制表;
1.6 匹配字符类
存在找出经常使用的数字、所有字母或所有数字字母字符等的匹配。
[:alnum:] 任意字母和数字(同[a-zA-Z0-9])
[:alpha:] 任意字符(同[a-zA-Z])
[:blank:] 空格和制表(同[\\t])
[:cntrl:] ASCII控制字符(ASCII0到31和127)
[:digit:] 任意数字(同[0-9])
[:graph:] 与[:print:]相同,但不包括空格
[:lower:] 任意小写字母(同[a-z])
[:print:] 任意可打印字符
[:punct:] 既不在[:alnum:]又不在 [:cntrl:]的任意字符
[:space:] 包括空格在内的任意空白字符(同\\f\\n\\r\\t\\v)
[:upper:] 任意大写字母(同[A-Z])
[:xdigit:] 任意十六进制数字
1.7 匹配多个实例
select DeviceNO,DeviceName from device where LocationX REGEXP '\\([0-9] sticks?\\)' order by LocationX;
输出: TNT(1 stick)
TNT(5 sticks)
1.7.1 使用 [:digit:]
select DeviceNO,DeviceName from device where LocationX REGEXP '[[:digit:]]{4}' order by LocationX;
1.8 定位符(^)
select DeviceNO,DeviceName from device where LocationX REGEXP '^[[:digit:]]{4}' order by LocationX;