日期:2014-05-16 浏览次数:20800 次
正则表达式是为复杂搜索指定模式的强大方式。
MySQL采用Henry Spencer的正则表达式实施,其目标是符合POSIX 1003.2。MySQL采用了扩展的版本,以支持在SQL语句中与REGEXP操作符一起使用的模式匹配操作。
归纳了在MySQL中可用于REGEXP操作的特殊字符和结构,并给出了一些示例。本附录未包含可在Henry Spencer的regex(7)手册页面中发现的所有细节。该手册页面包含在MySQL源码分发版中,位于regex目录下的regex.7文件中。
正则表达式描述了一组字符串。最简单的正则表达式是不含任何特殊字符的正则表达式。例如,正则表达式hello匹配hello。
非平凡的正则表达式采用了特殊的特定结构,从而使得它们能够与1个以上的字符串匹配。例如,正则表达式hello|word匹配字符串hello或字符串word。
作为一个更为复杂的示例,正则表达式B[an]*s匹配下述字符串中的任何一个:Bananas,Baaaaas,Bs,以及以B开始、以s结束、并在其中包含任意数目a或n字符的任何其他字符串。
对于REGEXP操作符,正则表达式可以使用任何下述特殊字符和结构:
·???????? ^
匹配字符串的开始部分。
mysql> SELECT 'fo\nfo' REGEXP '^fo$';?????????????????? -> 0
mysql> SELECT 'fofo' REGEXP '^fo';????????????????????? -> 1
·???????? $
匹配字符串的结束部分。
mysql> SELECT 'fo\no' REGEXP '^fo\no$';???????????????? -> 1
mysql> SELECT 'fo\no' REGEXP '^fo$';??????????????????? -> 0
·???????? .
匹配任何字符(包括回车和新行)。
mysql> SELECT 'fofo' REGEXP '^f.*$';??????????????????? -> 1
mysql> SELECT 'fo\r\nfo' REGEXP '^f.*$';??????????????? -> 1
·???????? a*
匹配0或多个a字符的任何序列。
mysql> SELECT 'Ban' REGEXP '^Ba*n';???????????????????? -> 1
mysql> SELECT 'Baaan' REGEXP '^Ba*n';?????????????????? -> 1
mysql> SELECT 'Bn' REGEXP '^Ba*n';????????????????????? -> 1
·???????? a+
匹配1个或多个a字符的任何序列。
mysql> SELECT 'Ban' REGEXP '^Ba+n';???????????????????? -> 1
mysql> SELECT 'Bn' REGEXP '^Ba+n';????????????????????? -> 0
·???????? a?
匹配0个或1个a字符。
mysql> SELECT 'Bn' REGEXP '^Ba?n';????????????????????? -> 1
mysql> SELECT 'Ban' REGEXP '^Ba?n';???????????????????? -> 1
mysql> SELECT 'Baan' REGEXP '^Ba?n';??????????????????? -> 0
·???????? de|abc
匹配序列de或abc。
mysql> SELECT 'pi' REGEXP 'pi|apa';???????????????????? -> 1
mysql> SELECT 'axe' REGEXP 'pi|apa';??????????????????? -> 0
mysql> SELECT 'apa' REGEXP 'pi|apa';??????????????????? -> 1
mysql> SELECT 'apa' REGEXP '^(pi|apa)$';??????????????? -> 1